Scroller.js:关于操作滚动元素的方法,包括获取滚动元素,设置滚动高度等常用方法。。。
function isWindow(val) {
return val === window;
}
var overflowScrollReg = /scroll|auto|overlay/i;
// 获取滚动的元素
function getScroller(el, root) {
if (root === void 0) {
root = window;
}
var node = el;
while (node && node.tagName !== 'HTML' && node.tagName !== 'BODY' && node.nodeType === 1 && node !== root) {
var _window$getComputedSt = window.getComputedStyle(node),
overflowY = _window$getComputedSt.overflowY;
if (overflowScrollReg.test(overflowY)) {
return node;
}
node = node.parentNode;
}
return root;
}
// 获取滚动元素的scrollTop
function getScrollTop(el) {
var top = 'scrollTop' in el ? el.scrollTop : el.pageYOffset; // iOS scroll bounce cause minus scrollTop
return Math.max(top, 0);
}
function setScrollTop(el, value) {
if ('scrollTop' in el) {
el.scrollTop = value;
} else {
el.scrollTo(el.scrollX, value);
}
}
function getRootScrollTop() {
return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
}
function setRootScrollTop(value) {
setScrollTop(window, value);
setScrollTop(document.body, value);
} // get distance from element top to page top or scroller top
function getElementTop(el, scroller) {
if (isWindow(el)) {
return 0;
}
var scrollTop = scroller ? getScrollTop(scroller) : getRootScrollTop();
return el.getBoundingClientRect().top + scrollTop;
}
function getVisibleHeight(el) {
if (isWindow(el)) {
return el.innerHeight;
}
// el.getBoundingClientRect().height = height + padding + border 不包括margin
return el.getBoundingClientRect().height;
}
function getVisibleTop(el) {
if (isWindow(el)) {
return 0;
}
// 元素上边到视窗上边的距离 包括(margin + border)
return el.getBoundingClientRect().top;
}