vue-cesium
Version:
Vue 3.x components for CesiumJS.
159 lines (154 loc) • 5.18 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var dom = require('./dom.js');
;
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
;