UNPKG

vue-hooks-plus

Version:
60 lines (59 loc) 1.86 kB
"use strict"; const vue = require("vue"); const domTarget = require("../utils/domTarget"); const useEffectWithTarget = require("../utils/useEffectWithTarget"); const _interopDefaultLegacy = (e) => e && typeof e === "object" && "default" in e ? e : { default: e }; const useEffectWithTarget__default = /* @__PURE__ */ _interopDefaultLegacy(useEffectWithTarget); function useScroll(target, shouldUpdate = () => true) { const position = vue.ref(); const shouldUpdateRef = vue.ref(shouldUpdate); useEffectWithTarget__default.default( () => { const el = domTarget.getTargetElement(target, document); if (!el) { return; } const updatePosition = () => { let newPosition; if (el === document) { if (document.scrollingElement) { newPosition = { left: document.scrollingElement.scrollLeft, top: document.scrollingElement.scrollTop }; } else { newPosition = { left: Math.max( window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop ), top: Math.max( window.pageXOffset, document.documentElement.scrollLeft, document.body.scrollLeft ) }; } } else { newPosition = { left: el.scrollLeft, top: el.scrollTop }; } if (shouldUpdateRef.value(newPosition)) { position.value = newPosition; } }; updatePosition(); el.addEventListener("scroll", updatePosition); return () => { el.removeEventListener("scroll", updatePosition); }; }, [], target ); return vue.readonly(position); } module.exports = useScroll;