index.mjs 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { isFunction } from '@vue/shared';
  2. const REPEAT_INTERVAL = 100;
  3. const REPEAT_DELAY = 600;
  4. const vRepeatClick = {
  5. beforeMount(el, binding) {
  6. const value = binding.value;
  7. const { interval = REPEAT_INTERVAL, delay = REPEAT_DELAY } = isFunction(value) ? {} : value;
  8. let intervalId;
  9. let delayId;
  10. const handler = () => isFunction(value) ? value() : value.handler();
  11. const clear = () => {
  12. if (delayId) {
  13. clearTimeout(delayId);
  14. delayId = void 0;
  15. }
  16. if (intervalId) {
  17. clearInterval(intervalId);
  18. intervalId = void 0;
  19. }
  20. };
  21. el.addEventListener("mousedown", (evt) => {
  22. if (evt.button !== 0)
  23. return;
  24. clear();
  25. handler();
  26. document.addEventListener("mouseup", () => clear(), {
  27. once: true
  28. });
  29. delayId = setTimeout(() => {
  30. intervalId = setInterval(() => {
  31. handler();
  32. }, interval);
  33. }, delay);
  34. });
  35. }
  36. };
  37. export { REPEAT_DELAY, REPEAT_INTERVAL, vRepeatClick };
  38. //# sourceMappingURL=index.mjs.map