@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
40 lines (39 loc) • 1.21 kB
JavaScript
import { c as canUseDom } from "./can-use-dom.js";
const defaultRoot = canUseDom ? window : void 0;
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;
}
function getAllScrollableParents(element, scrollableParents = []) {
if (!element) {
return scrollableParents;
}
const isScrollable = element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;
if (isScrollable) {
if (element.nodeName === "HTML") {
scrollableParents.push(document);
} else {
scrollableParents.push(element);
}
}
return getAllScrollableParents(element.parentElement, scrollableParents);
}
export {
getAllScrollableParents as a,
getScrollParent as g
};