naive-ui/packages/utils/dom/getScrollParent.js

32 lines
877 B
JavaScript
Raw Normal View History

2019-07-11 19:51:59 +08:00
import getStyleComputedProperty from './getStyleComputedProperty'
import getParentNode from './getParentNode'
/**
* Returns the scrolling parent of the given element
* @method
* @param {Element} element
* @returns {Element} scroll parent
*/
export default function getScrollParent (element) {
// Return body, `getScroll` will take care to get the correct `scrollTop` from it
if (!element) {
return document.body
}
switch (element.nodeName) {
case 'HTML':
case 'BODY':
return element.ownerDocument.body
case '#document':
return element.body
}
// Firefox want us to check `-x` and `-y` variations as well
const { overflow, overflowX, overflowY } = getStyleComputedProperty(element)
if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
return element
}
return getScrollParent(getParentNode(element))
}