noDoubleClick.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // 自定义指令定义
  2. {/* demo <div v-no-double-click="myMethod">Click me</div> */ }
  3. export default {
  4. mounted(el, binding, vnode) {
  5. // 记录上一次点击的时间
  6. let lastClickTime = 0;
  7. // 监听元素的点击事件
  8. el.addEventListener('click', function (event) {
  9. console.log(lastClickTime)
  10. if(lastClickTime == 0){
  11. binding.value(event);
  12. lastClickTime = Date.now();
  13. }else{
  14. // 获取当前时间戳
  15. let currentTime = Date.now();
  16. // 定义禁止连续点击的时间间隔(以毫秒为单位)
  17. const doubleClickInterval = 500;
  18. // 检查是否在禁止的时间间隔内进行了连续点击
  19. if (currentTime - lastClickTime > doubleClickInterval) {
  20. // 阻止默认行为
  21. event.preventDefault();
  22. binding.value(event);
  23. // 更新上一次点击的时间戳
  24. lastClickTime = currentTime;
  25. }
  26. }
  27. });
  28. // let clickTimer;
  29. // console.log(el, binding, vnode)
  30. // console.log('v-no-double-click mounted')
  31. // el.addEventListener('click', function (event) {
  32. // if (clickTimer) {
  33. // // 如果上一次点击的计时器还存在,则取消计时器并阻止连续点击
  34. // clearTimeout(clickTimer);
  35. // }
  36. // // 创建一个延迟执行的函数,以防止连续点击
  37. // clickTimer = setTimeout(() => {
  38. // binding.value(event)
  39. // }, 200); // 设置延迟时间(毫秒)
  40. // });
  41. },
  42. // 在元素被插入到 DOM 中时被调用
  43. inserted: function (el, binding, vnode) {
  44. }
  45. }