UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

40 lines (39 loc) 1.21 kB
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 };