doubleTap.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. const doubleTap = {
  2. install(Vue) {
  3. Vue.directive('double-tap', {
  4. bind(el, binding) {
  5. let lastTap = 0;
  6. let timeout = null;
  7. const handleClick = (event) => {
  8. const now = Date.now();
  9. const timeDiff = now - lastTap;
  10. if (timeout) clearTimeout(timeout);
  11. if (timeDiff < 300 && timeDiff > 0) {
  12. // 双击事件
  13. if (typeof binding.value === 'function') {
  14. binding.value(event);
  15. }
  16. lastTap = 0;
  17. } else {
  18. // 设置单击定时器
  19. timeout = setTimeout(() => {
  20. lastTap = 0;
  21. }, 300);
  22. lastTap = now;
  23. }
  24. };
  25. el.addEventListener('click', handleClick);
  26. el._doubleTapHandler = handleClick;
  27. },
  28. unbind(el) {
  29. if (el._doubleTapHandler) {
  30. el.removeEventListener('click', el._doubleTapHandler);
  31. delete el._doubleTapHandler;
  32. }
  33. }
  34. });
  35. }
  36. }
  37. export default doubleTap;