Deep dive into how IntersectionObserver works