Scroll down to see IntersectionObserver & rAF in action
This element fades in and moves up as it enters the viewport. It's triggered by a native Vanilla JS IntersectionObserver.
Elements can slide in from the sides. The observer adds an .is-visible class, and CSS transitions handle the smooth movement.
Triggered once via observer, animated using a custom requestAnimationFrame easing function.
Calculating scroll progress manually to scrub through frames.