<div class="block empty-block">
  scroll to trigger animation
</div>
<div class="block animation-container">
  <h1 class="line-1">I build things that look good and actually work.</h1>
  <p class="line-2">Less guesswork. More user love.</p>
</div>
body {
  font-family: Avenir, sans-serif;
  background-color: #0e100f;
  color: #fffce1;
}

.block {
  height: 100vh;
  width: 100%;
}

.empty-block {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
  flex-direction: column;
  background-color: #0e1222;
}

.animation-container {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
  flex-direction: column;
}

p {
  max-width: 70ch;
  font-size: 1.4rem;
  text-align: center;
  line-height: 1.3;
}
function splitText(text) {
  return text
    .split("")
    .map((char) => `<span class="text-animation">${char}</span>`)
    .join("");
}

gsap.registerPlugin(ScrollTrigger);

document.addEventListener("DOMContentLoaded", () => {
  const line1 = document.querySelector(".line-1");
  const line2 = document.querySelector(".line-2");

  line1.innerHTML = splitText(line1.innerText);
  line2.innerHTML = splitText(line2.innerText);

  gsap.from(".text-animation", {
    scrollTrigger: {
      trigger: ".animation-container",
      start: "top center",
      end: "bottom bottom",
      scrub: 1,
      toggleActions: "restart none none reverse"
    },
    opacity: 0,
    duration: 0.00001,
    stagger: 0.000001
  });
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/gsap.min.js
  2. https://assets.codepen.io/16327/CustomBounce3.min.js
  3. https://assets.codepen.io/16327/CustomEase3.min.js
  4. https://assets.codepen.io/16327/CustomWiggle3.min.js
  5. https://assets.codepen.io/16327/DrawSVGPlugin3.min.js
  6. https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/Draggable.min.js
  7. https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/EaselPlugin.min.js
  8. https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/EasePack.min.js
  9. https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/Flip.min.js
  10. https://assets.codepen.io/16327/GSDevTools3.min.js
  11. https://assets.codepen.io/16327/InertiaPlugin.min.js
  12. https://assets.codepen.io/16327/MorphSVGPlugin3.min.js
  13. https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/MotionPathPlugin.min.js
  14. https://assets.codepen.io/16327/MotionPathHelper.min.js
  15. https://assets.codepen.io/16327/PhysicsPropsPlugin3.min.js
  16. https://assets.codepen.io/16327/Physics2DPlugin3.min.js
  17. https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/PixiPlugin.min.js
  18. https://assets.codepen.io/16327/ScrambleTextPlugin3.min.js
  19. https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/ScrollToPlugin.min.js
  20. https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/ScrollTrigger.min.js
  21. https://assets.codepen.io/16327/SplitText3.min.js
  22. https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/TextPlugin.min.js
  23. https://assets.codepen.io/16327/ScrollSmoother.min.js
  24. https://cdn.jsdelivr.net/npm/gsap@3.12.7/dist/Observer.min.js