22 lines
931 B
JavaScript
22 lines
931 B
JavaScript
import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';
|
|
import getScroll from './getScroll';
|
|
import getClientRect from './getClientRect';
|
|
|
|
export default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {
|
|
const html = element.ownerDocument.documentElement;
|
|
const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
|
|
const width = Math.max(html.clientWidth, window.innerWidth || 0);
|
|
const height = Math.max(html.clientHeight, window.innerHeight || 0);
|
|
|
|
const scrollTop = !excludeScroll ? getScroll(html) : 0;
|
|
const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
|
|
|
|
const offset = {
|
|
top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
|
|
left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
|
|
width,
|
|
height,
|
|
};
|
|
|
|
return getClientRect(offset);
|
|
} |