Customize when the observer triggers:
const observer = new IntersectionObserver(callback, {
root: null, // viewport
rootMargin: "50px", // trigger 50px before visible
threshold: 0.5 // 50% visible
});
threshold can be a single value or array like [0, 0.5, 1] for multiple triggers.