overscroll
Version:
66 lines (53 loc) • 2.14 kB
JavaScript
export default (function (scope) {
var target = scope.target,
win = scope.win,
overscroll = scope.overscroll,
isPageScroll = scope.isPageScroll,
resetState = scope.resetState,
getScroll = scope.getScroll,
getFromRange = scope.getFromRange,
getScrollSize = scope.getScrollSize,
getClientSize = scope.getClientSize;
function setScroll() {
var scrollLeft = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : overscroll.scrollLeft;
var scrollTop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : overscroll.scrollTop;
// 取出滚动区域大小和可视范围计算滚动位置
var scrollTopRange = overscroll.scrollTopRange,
scrollLeftRange = overscroll.scrollLeftRange;
var newScrollTop = scrollTopRange(scrollTop);
var newScrollLeft = scrollLeftRange(scrollLeft);
// 重置dom状态
resetState(newScrollTop, newScrollLeft);
// 缓存滚动条位置
overscroll.scrollLeft = newScrollLeft;
overscroll.scrollTop = newScrollTop;
if (isPageScroll) {
win.scrollTo(overscroll.scrollLeft, overscroll.scrollTop);
} else {
target.scrollTop = overscroll.scrollTop;
target.scrollLeft = overscroll.scrollLeft;
}
}
function resetCache() {
var _getScroll = getScroll(),
top = _getScroll.top,
left = _getScroll.left;
var _getScrollSize = getScrollSize(),
scrollWidth = _getScrollSize.width,
scrollHeight = _getScrollSize.height;
var _getClientSize = getClientSize(),
clientWidth = _getClientSize.width,
clientHeight = _getClientSize.height;
overscroll.scrollTop = top;
overscroll.scrollLeft = left;
overscroll.scrollWidth = scrollWidth;
overscroll.scrollHeight = scrollHeight;
overscroll.clientWidth = clientWidth;
overscroll.clientHeight = clientHeight;
overscroll.scrollTopRange = getFromRange(0, scrollHeight - clientHeight);
overscroll.scrollLeftRange = getFromRange(0, scrollWidth - clientWidth);
}
return {
setScroll: setScroll, resetCache: resetCache
};
});