UNPKG

overscroll

Version:
66 lines (53 loc) 2.14 kB
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 }; });