48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
function inserted(el, binding) {
|
|
const modifiers = binding.modifiers || {};
|
|
const value = binding.value;
|
|
const {
|
|
handler,
|
|
options
|
|
} = typeof value === 'object' ? value : {
|
|
handler: value,
|
|
options: {}
|
|
};
|
|
const observer = new IntersectionObserver((entries = [], observer) => {
|
|
/* istanbul ignore if */
|
|
if (!el._observe) return; // Just in case, should never fire
|
|
// If is not quiet or has already been
|
|
// initted, invoke the user callback
|
|
|
|
if (handler && (!modifiers.quiet || el._observe.init)) {
|
|
const isIntersecting = Boolean(entries.find(entry => entry.isIntersecting));
|
|
handler(entries, observer, isIntersecting);
|
|
} // If has already been initted and
|
|
// has the once modifier, unbind
|
|
|
|
|
|
if (el._observe.init && modifiers.once) unbind(el); // Otherwise, mark the observer as initted
|
|
else el._observe.init = true;
|
|
}, options);
|
|
el._observe = {
|
|
init: false,
|
|
observer
|
|
};
|
|
observer.observe(el);
|
|
}
|
|
|
|
function unbind(el) {
|
|
/* istanbul ignore if */
|
|
if (!el._observe) return;
|
|
|
|
el._observe.observer.unobserve(el);
|
|
|
|
delete el._observe;
|
|
}
|
|
|
|
export const Intersect = {
|
|
inserted,
|
|
unbind
|
|
};
|
|
export default Intersect;
|
|
//# sourceMappingURL=index.js.map
|