UNPKG

@nutui/nutui-react

Version:

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

46 lines (45 loc) 1.57 kB
import { canUseDom } from "./can-use-dom"; var defaultRoot = canUseDom ? window : undefined; var overflowStylePatterns = [ 'scroll', 'auto', 'overlay' ]; function isElement(node) { var ELEMENT_NODE_TYPE = 1; return node.nodeType === ELEMENT_NODE_TYPE; } export function getScrollParent(el) { var root = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : defaultRoot; var node = el; while(node && node !== root && isElement(node)){ if (node === document.body) { return root; } var overflowY = window.getComputedStyle(node).overflowY; if (overflowStylePatterns.includes(overflowY) && node.scrollHeight > node.clientHeight) { return node; } node = node.parentNode; } return root; } export function getAllScrollableParents(element) { var scrollableParents = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : []; if (!element) { return scrollableParents; } // 检查元素是否具有滚动条 var isScrollable = element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth; if (isScrollable) { // 如果当前元素具有滚动条,则将其添加到数组中 if (element.nodeName === 'HTML') { // @ts-ignore scrollableParents.push(document); } else { scrollableParents.push(element); } } // 递归检查父元素 return getAllScrollableParents(element.parentElement, scrollableParents); }