1 | import { canUseDom } from './can-use-dom';
|
2 | const defaultRoot = canUseDom ? window : undefined;
|
3 | const overflowStylePatterns = ['scroll', 'auto', 'overlay'];
|
4 | function isElement(node) {
|
5 | const ELEMENT_NODE_TYPE = 1;
|
6 | return node.nodeType === ELEMENT_NODE_TYPE;
|
7 | }
|
8 | export 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 |