UNPKG

683 BJavaScriptView Raw
1import { canUseDom } from './can-use-dom';
2const defaultRoot = canUseDom ? window : undefined;
3const overflowStylePatterns = ['scroll', 'auto', 'overlay'];
4function isElement(node) {
5 const ELEMENT_NODE_TYPE = 1;
6 return node.nodeType === ELEMENT_NODE_TYPE;
7}
8export function getScrollParent(el, root = defaultRoot) {
9 let node = el;
10 while (node && node !== root && isElement(node)) {
11 if (node === document.body) {
12 return root;
13 }
14 const {
15 overflowY
16 } = window.getComputedStyle(node);
17 if (overflowStylePatterns.includes(overflowY) && node.scrollHeight > node.clientHeight) {
18 return node;
19 }
20 node = node.parentNode;
21 }
22 return root;
23}
\No newline at end of file