doubleTap.js 980 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. const doubleTap = {
  2. install(app) {
  3. app.directive('double-tap', {
  4. mounted(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. if (typeof binding.value === 'function') {
  13. binding.value(event);
  14. }
  15. lastTap = 0;
  16. } else {
  17. timeout = setTimeout(() => {
  18. lastTap = 0;
  19. }, 300);
  20. lastTap = now;
  21. }
  22. };
  23. el.addEventListener('click', handleClick);
  24. el._doubleTapHandler = handleClick;
  25. },
  26. unmounted(el) {
  27. if (el._doubleTapHandler) {
  28. el.removeEventListener('click', el._doubleTapHandler);
  29. delete el._doubleTapHandler;
  30. }
  31. }
  32. });
  33. }
  34. }
  35. export default doubleTap;