40 lines
839 B
JavaScript
40 lines
839 B
JavaScript
const style = (element, prop) => {
|
|
let styleVal = '';
|
|
if (typeof getComputedStyle !== 'undefined') {
|
|
styleVal = window.getComputedStyle(element, null).getPropertyValue(prop);
|
|
} else {
|
|
styleVal = element.style[prop];
|
|
}
|
|
return styleVal;
|
|
};
|
|
|
|
const overflow = element =>
|
|
style(element, 'overflow') + style(element, 'overflow-y') + style(element, 'overflow-x');
|
|
|
|
const scrollParent = element => {
|
|
if (!(element instanceof window.HTMLElement)) {
|
|
return window;
|
|
}
|
|
|
|
let parent = element;
|
|
|
|
while (parent) {
|
|
if (parent === document.body || parent === document.documentElement) {
|
|
break;
|
|
}
|
|
|
|
if (!parent.parentNode) {
|
|
break;
|
|
}
|
|
if (/(scroll|auto)/.test(overflow(parent))) {
|
|
return parent;
|
|
}
|
|
|
|
parent = parent.parentNode;
|
|
}
|
|
|
|
return window;
|
|
};
|
|
|
|
export default scrollParent;
|