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