ant-design-vue/components/vc-lazy-load/src/utils/inViewport.js

38 lines
1.0 KiB
JavaScript

import getElementPosition from './getElementPosition';
const isHidden = element => element.offsetParent === null;
export default function inViewport(element, container, customOffset) {
if (isHidden(element)) {
return false;
}
let top;
let bottom;
let left;
let right;
if (typeof container === 'undefined' || container === window) {
top = window.pageYOffset;
left = window.pageXOffset;
bottom = top + window.innerHeight;
right = left + window.innerWidth;
} else {
const containerPosition = getElementPosition(container);
top = containerPosition.top;
left = containerPosition.left;
bottom = top + container.offsetHeight;
right = left + container.offsetWidth;
}
const elementPosition = getElementPosition(element);
return (
top <= elementPosition.top + element.offsetHeight + customOffset.top &&
bottom >= elementPosition.top - customOffset.bottom &&
left <= elementPosition.left + element.offsetWidth + customOffset.left &&
right >= elementPosition.left - customOffset.right
);
}