NormCyber has since redesigned their site, so this motion is no longer live there. This page runs the original ScrollTrigger code from my 2024 build on placeholder content. The motion is the same, the client's content is not.
Each block pins to the viewport and the next one stacks over it, like a deck of cards.
This is the logic from the theme's block-scroll.js. Short blocks pin from the top, and tall blocks pin once their bottom edge reaches the viewport, so nothing gets cut off. The only change here is that the original's jQuery overflow toggles are plain DOM calls.
panels.forEach((panel) => {
ScrollTrigger.create({
trigger: panel,
start: () =>
panel.offsetHeight < window.innerHeight ? "top top" : "bottom bottom",
pin: true,
pinSpacing: false,
});
});
The full write-up of the build is on the NormCyber case study.