123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- export default defineNuxtPlugin(nuxtApp => {
- // 使用nuxtApp做一些操作
- nuxtApp.vueApp.directive('longPress', {
- // 当被绑定的元素插入到DOM中时……
- inserted: function(el, binding, vnode) {
- let pressTimer = null;
- // 监听touchstart事件
- el.addEventListener("touchstart", e => {
- // 阻止默认事件,比如触摸滚动
- e.preventDefault();
- // 清除之前的定时器(如果存在)
- if (pressTimer !== null) {
- clearTimeout(pressTimer);
- }
- // 设置定时器,等待一段时间后执行长按逻辑
- pressTimer = setTimeout(() => {
- // 调用传入的函数,并传入事件对象
- if (typeof binding.value === "function") {
- // 判定为长按
- binding.value(true, e);
- }
- }, 500); // 假设长按时间为500毫秒
- });
- // 监听touchend和touchcancel事件来取消定时器
- el.addEventListener("touchend", e => {
- // 取消长按
- binding.value(false, e);
- clearTimeout(pressTimer);
- pressTimer = null;
- });
- el.addEventListener("touchcancel", e => {
- clearTimeout(pressTimer);
- pressTimer = null;
- });
- },
- // 当绑定元素的父组件被卸载时,解绑事件
- unbind: function(el) {
- el.removeEventListener("touchstart");
- el.removeEventListener("touchend");
- el.removeEventListener("touchcancel");
- }
- })
- })
|