index.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var shared = require('@vue/shared');
  4. const REPEAT_INTERVAL = 100;
  5. const REPEAT_DELAY = 600;
  6. const SCOPE = "_RepeatClick";
  7. const vRepeatClick = {
  8. beforeMount(el, binding) {
  9. const value = binding.value;
  10. const { interval = REPEAT_INTERVAL, delay = REPEAT_DELAY } = shared.isFunction(
  11. value
  12. ) ? {} : value;
  13. let intervalId;
  14. let delayId;
  15. const handler = () => shared.isFunction(value) ? value() : value.handler();
  16. const clear = () => {
  17. if (delayId) {
  18. clearTimeout(delayId);
  19. delayId = void 0;
  20. }
  21. if (intervalId) {
  22. clearInterval(intervalId);
  23. intervalId = void 0;
  24. }
  25. };
  26. const start = (evt) => {
  27. if (evt.button !== 0)
  28. return;
  29. clear();
  30. handler();
  31. document.addEventListener("mouseup", clear, { once: true });
  32. delayId = setTimeout(() => {
  33. intervalId = setInterval(() => {
  34. handler();
  35. }, interval);
  36. }, delay);
  37. };
  38. el[SCOPE] = { start, clear };
  39. el.addEventListener("mousedown", start);
  40. },
  41. unmounted(el) {
  42. if (!el[SCOPE])
  43. return;
  44. const { start, clear } = el[SCOPE];
  45. if (start) {
  46. el.removeEventListener("mousedown", start);
  47. }
  48. if (clear) {
  49. clear();
  50. document.removeEventListener("mouseup", clear);
  51. }
  52. el[SCOPE] = null;
  53. }
  54. };
  55. exports.REPEAT_DELAY = REPEAT_DELAY;
  56. exports.REPEAT_INTERVAL = REPEAT_INTERVAL;
  57. exports.vRepeatClick = vRepeatClick;
  58. //# sourceMappingURL=index.js.map