Text Reveal Reverse
Each .reveal-block has its own ScrollTrigger with toggleActions: 'play none none reverse'. When a block scrolls back above its trigger, the lines slide back down behind their overflow: hidden masks. The word-by-word .words-block uses the same pattern with a shorter stagger: 0.08.
각 .reveal-block은 toggleActions: 'play none none reverse'를 가진 자체 ScrollTrigger를 갖습니다. 블록이 트리거 위로 스크롤되면 줄들이 overflow: hidden 마스크 뒤로 다시 내려갑니다. 단어별 .words-block은 더 짧은 stagger: 0.08로 동일한 패턴을 사용합니다.
Source Code script.js
gsap.registerPlugin(ScrollTrigger);
// Line-by-line reveal for each .reveal-block
gsap.utils.toArray('.reveal-block').forEach((block) => {
const lines = block.querySelectorAll('.line');
gsap.to(lines, {
y: 0,
duration: 0.7,
ease: 'power2.out',
stagger: 0.12,
scrollTrigger: {
trigger: block,
start: 'top 85%',
toggleActions: 'play none none reverse',
},
});
});
// Word-by-word reveal
const words = gsap.utils.toArray('.word');
gsap.to(words, {
y: 0,
duration: 0.6,
ease: 'power2.out',
stagger: 0.08,
scrollTrigger: {
trigger: '.words-block',
start: 'top 85%',
toggleActions: 'play none none reverse',
},
});