diff --git a/src/utils/popper.js b/src/utils/popper.js index 2f9202624..bd7ea4278 100644 --- a/src/utils/popper.js +++ b/src/utils/popper.js @@ -517,9 +517,17 @@ var scrollParent = getScrollParent(this._popper); var offsetParentRect = getOffsetRect(offsetParent); + // Thanks the fucking native API, `document.body.scrollTop` & `document.documentElement.scrollTop` + var getScrollTopValue = function (element) { + return element == document.body ? Math.max(document.documentElement.scrollTop, document.body.scrollTop) : element.scrollTop; + } + var getScrollLeftValue = function (element) { + return element == document.body ? Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) : element.scrollLeft; + } + // if the popper is fixed we don't have to substract scrolling from the boundaries - var scrollTop = data.offsets.popper.position === 'fixed' ? 0 : scrollParent.scrollTop; - var scrollLeft = data.offsets.popper.position === 'fixed' ? 0 : scrollParent.scrollLeft; + var scrollTop = data.offsets.popper.position === 'fixed' ? 0 : getScrollTopValue(scrollParent); + var scrollLeft = data.offsets.popper.position === 'fixed' ? 0 : getScrollLeftValue(scrollParent); boundaries = { top: 0 - (offsetParentRect.top - scrollTop),