UNPKG

vue-cesium

Version:
159 lines (154 loc) 5.18 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var dom = require('./dom.js'); "use strict"; const scrollTargets = [null, document, document.body, document.scrollingElement, document.documentElement]; function getScrollTarget(el, targetEl) { let target = dom.getElement(targetEl); if (target === void 0) { if (el === void 0 || el === null) { return window; } target = el.closest(".scroll,.scroll-y,.overflow-auto"); } return scrollTargets.includes(target) ? window : target; } function getScrollHeight(el) { return (el === window ? document.body : el).scrollHeight; } function getScrollWidth(el) { return (el === window ? document.body : el).scrollWidth; } function getVerticalScrollPosition(scrollTarget) { return scrollTarget === window ? window.pageYOffset || window.scrollY || document.body.scrollTop || 0 : scrollTarget.scrollTop; } function getHorizontalScrollPosition(scrollTarget) { return scrollTarget === window ? window.pageXOffset || window.scrollX || document.body.scrollLeft || 0 : scrollTarget.scrollLeft; } function animVerticalScrollTo(el, to, duration = 0, prevTime) { prevTime = prevTime || performance.now(); const pos = getVerticalScrollPosition(el); if (duration <= 0) { if (pos !== to) { setScroll(el, to); } return; } requestAnimationFrame((nowTime) => { const frameTime = nowTime - prevTime; const newPos = pos + (to - pos) / Math.max(frameTime, duration) * frameTime; setScroll(el, newPos); if (newPos !== to) { animVerticalScrollTo(el, to, duration - frameTime, nowTime); } }); } function animHorizontalScrollTo(el, to, duration = 0, prevTime) { prevTime = prevTime || performance.now(); const pos = getHorizontalScrollPosition(el); if (duration <= 0) { if (pos !== to) { setHorizontalScroll(el, to); } return; } requestAnimationFrame((nowTime) => { const frameTime = nowTime - prevTime; const newPos = pos + (to - pos) / Math.max(frameTime, duration) * frameTime; setHorizontalScroll(el, newPos); if (newPos !== to) { animHorizontalScrollTo(el, to, duration - frameTime, nowTime); } }); } function setScroll(scrollTarget, offset) { if (scrollTarget === window) { window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, offset); return; } scrollTarget.scrollTop = offset; } function setHorizontalScroll(scrollTarget, offset) { if (scrollTarget === window) { window.scrollTo(offset, window.pageYOffset || window.scrollY || document.body.scrollTop || 0); return; } scrollTarget.scrollLeft = offset; } function setVerticalScrollPosition(scrollTarget, offset, duration) { if (duration) { animVerticalScrollTo(scrollTarget, offset, duration); return; } setScroll(scrollTarget, offset); } function setHorizontalScrollPosition(scrollTarget, offset, duration) { if (duration) { animHorizontalScrollTo(scrollTarget, offset, duration); return; } setHorizontalScroll(scrollTarget, offset); } let size; function getScrollbarWidth() { if (size !== void 0) { return size; } const inner = document.createElement("p"), outer = document.createElement("div"); dom.css(inner, { width: "100%", height: "200px" }); dom.css(outer, { position: "absolute", top: "0px", left: "0px", visibility: "hidden", width: "200px", height: "150px", overflow: "hidden" }); outer.appendChild(inner); document.body.appendChild(outer); const w1 = inner.offsetWidth; outer.style.overflow = "scroll"; let w2 = inner.offsetWidth; if (w1 === w2) { w2 = outer.clientWidth; } outer.remove(); size = w1 - w2; return size; } function hasScrollbar(el, onY = true) { if (!el || el.nodeType !== Node.ELEMENT_NODE) { return false; } return onY ? el.scrollHeight > el.clientHeight && (el.classList.contains("scroll") || el.classList.contains("overflow-auto") || ["auto", "scroll"].includes(window.getComputedStyle(el)["overflow-y"])) : el.scrollWidth > el.clientWidth && (el.classList.contains("scroll") || el.classList.contains("overflow-auto") || ["auto", "scroll"].includes(window.getComputedStyle(el)["overflow-x"])); } var scroll = { getScrollTarget, getScrollHeight, getScrollWidth, getVerticalScrollPosition, getHorizontalScrollPosition, animVerticalScrollTo, animHorizontalScrollTo, setVerticalScrollPosition, setHorizontalScrollPosition, getScrollbarWidth, hasScrollbar }; exports.animHorizontalScrollTo = animHorizontalScrollTo; exports.animVerticalScrollTo = animVerticalScrollTo; exports["default"] = scroll; exports.getHorizontalScrollPosition = getHorizontalScrollPosition; exports.getScrollHeight = getScrollHeight; exports.getScrollTarget = getScrollTarget; exports.getScrollWidth = getScrollWidth; exports.getScrollbarWidth = getScrollbarWidth; exports.getVerticalScrollPosition = getVerticalScrollPosition; exports.hasScrollbar = hasScrollbar; exports.setHorizontalScrollPosition = setHorizontalScrollPosition; exports.setVerticalScrollPosition = setVerticalScrollPosition; //# sourceMappingURL=scroll.js.map