antd-mobile
Version:
<div align="center">
29 lines (28 loc) • 810 B
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getScrollParent = getScrollParent;
var _canUseDom = require("./can-use-dom");
const defaultRoot = _canUseDom.canUseDom ? window : undefined;
const overflowStylePatterns = ['scroll', 'auto', 'overlay'];
function isElement(node) {
const ELEMENT_NODE_TYPE = 1;
return node.nodeType === ELEMENT_NODE_TYPE;
}
function getScrollParent(el, root = defaultRoot) {
let node = el;
while (node && node !== root && isElement(node)) {
if (node === document.body) {
return root;
}
const {
overflowY
} = window.getComputedStyle(node);
if (overflowStylePatterns.includes(overflowY) && node.scrollHeight > node.clientHeight) {
return node;
}
node = node.parentNode;
}
return root;
}
;