longPress.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. export default defineNuxtPlugin(nuxtApp => {
  2. // 使用nuxtApp做一些操作
  3. nuxtApp.vueApp.directive('longPress', {
  4. // 当被绑定的元素插入到DOM中时……
  5. inserted: function(el, binding, vnode) {
  6. let pressTimer = null;
  7. // 监听touchstart事件
  8. el.addEventListener("touchstart", e => {
  9. // 阻止默认事件,比如触摸滚动
  10. e.preventDefault();
  11. // 清除之前的定时器(如果存在)
  12. if (pressTimer !== null) {
  13. clearTimeout(pressTimer);
  14. }
  15. // 设置定时器,等待一段时间后执行长按逻辑
  16. pressTimer = setTimeout(() => {
  17. // 调用传入的函数,并传入事件对象
  18. if (typeof binding.value === "function") {
  19. // 判定为长按
  20. binding.value(true, e);
  21. }
  22. }, 500); // 假设长按时间为500毫秒
  23. });
  24. // 监听touchend和touchcancel事件来取消定时器
  25. el.addEventListener("touchend", e => {
  26. // 取消长按
  27. binding.value(false, e);
  28. clearTimeout(pressTimer);
  29. pressTimer = null;
  30. });
  31. el.addEventListener("touchcancel", e => {
  32. clearTimeout(pressTimer);
  33. pressTimer = null;
  34. });
  35. },
  36. // 当绑定元素的父组件被卸载时,解绑事件
  37. unbind: function(el) {
  38. el.removeEventListener("touchstart");
  39. el.removeEventListener("touchend");
  40. el.removeEventListener("touchcancel");
  41. }
  42. })
  43. })