overscroll
Version:
58 lines (44 loc) • 1.48 kB
JavaScript
;
exports.__esModule = true;
var _css = require('../css');
var _domData = require('./domData');
// 实际情况下 body documentElement 不会都设置 overflow: scroll
// 推荐 html, body { height: 100% } body { overflow: auto; }
function compose(funcA, funcB) {
return function () {
return funcA(funcB.apply(undefined, arguments));
};
}
var scrollable = function scrollable(attr) {
return function (dom) {
return ['overlay', 'scroll', 'auto'].includes((0, _css.get)(dom, attr));
};
};
exports['default'] = function (_ref) {
var body = _ref.body,
html = _ref.html,
target = _ref.target,
OVERSCROLLX = _ref.OVERSCROLLX,
OVERSCROLLY = _ref.OVERSCROLLY;
function hasScrollX(dom) {
return dom.scrollWidth > dom.clientWidth && ((0, _domData.hasData)(dom, OVERSCROLLX) || scrollable('overflow-x')(dom));
}
function hasScrollY(dom) {
return dom.scrollHeight > dom.clientHeight && ((0, _domData.hasData)(dom, OVERSCROLLY) || scrollable('overflow-y')(dom));
}
function scrollingElement() {
var dom = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : target;
return dom === body ? html : dom;
}
function hasScroll(dom) {
return {
x: hasScrollX(dom),
y: hasScrollY(dom)
};
}
return {
hasScroll: compose(hasScroll, scrollingElement),
hasScrollX: compose(hasScrollX, scrollingElement),
hasScrollY: compose(hasScrollY, scrollingElement)
};
};