UNPKG

@vuesax-alpha/nightly

Version:
40 lines (37 loc) 1.57 kB
import { createCoords } from '../../utils/index.mjs'; import { isHTMLElement, getDocumentElement, getNodeName, isOverflowElement, getNodeScroll } from '../../utils/dom.mjs'; import { getBoundingClientRect } from './get-bounding-client-rect.mjs'; import { getWindowScrollBarX } from './get-window-scrollbar-x.mjs'; function getRectRelativeToOffsetParent(element, offsetParent, strategy) { const isOffsetParentAnElement = isHTMLElement(offsetParent); const documentElement = getDocumentElement(offsetParent); const isFixed = strategy === "fixed"; const rect = getBoundingClientRect(element, true, isFixed, offsetParent); let scroll = { scrollLeft: 0, scrollTop: 0 }; const offsets = createCoords(0); if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { scroll = getNodeScroll(offsetParent); } if (isOffsetParentAnElement) { const offsetRect = getBoundingClientRect( offsetParent, true, isFixed, offsetParent ); offsets.x = offsetRect.x + offsetParent.clientLeft; offsets.y = offsetRect.y + offsetParent.clientTop; } else if (documentElement) { offsets.x = getWindowScrollBarX(documentElement); } } return { x: rect.left + scroll.scrollLeft - offsets.x, y: rect.top + scroll.scrollTop - offsets.y, width: rect.width, height: rect.height }; } export { getRectRelativeToOffsetParent }; //# sourceMappingURL=get-rect-relative-to-offset-parent.mjs.map