index.mjs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // Types
  2. function mounted(el, binding) {
  3. const {
  4. self = false
  5. } = binding.modifiers ?? {};
  6. const value = binding.value;
  7. const options = typeof value === 'object' && value.options || {
  8. passive: true
  9. };
  10. const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
  11. const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
  12. if (!target) return;
  13. target.addEventListener('scroll', handler, options);
  14. el._onScroll = Object(el._onScroll);
  15. el._onScroll[binding.instance.$.uid] = {
  16. handler,
  17. options,
  18. // Don't reference self
  19. target: self ? undefined : target
  20. };
  21. }
  22. function unmounted(el, binding) {
  23. if (!el._onScroll?.[binding.instance.$.uid]) return;
  24. const {
  25. handler,
  26. options,
  27. target = el
  28. } = el._onScroll[binding.instance.$.uid];
  29. target.removeEventListener('scroll', handler, options);
  30. delete el._onScroll[binding.instance.$.uid];
  31. }
  32. function updated(el, binding) {
  33. if (binding.value === binding.oldValue) return;
  34. unmounted(el, binding);
  35. mounted(el, binding);
  36. }
  37. export const Scroll = {
  38. mounted,
  39. unmounted,
  40. updated
  41. };
  42. export default Scroll;
  43. //# sourceMappingURL=index.mjs.map