38 lines
1.0 KiB
JavaScript
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
|
|
);
|
|
}
|