CODE
// 01 : 이미지 애니메이션 주기 -------------------------- 
const ani1 = gsap.timeline();
ani1.to("#section-01 .target", {rotation: 720, scale: 0, borderRadius: 200})
    .to("#section-01 .target", {rotation: 0, scale: 1, borderRadius: 20});
ScrollTrigger.create({
    animation: ani1,
    trigger: "#section-01",
    start: "top top",
    end: "+=2000",
    scrub: true,
    pin: true,
    anticipatePin: 1,
    markers: false
});

anticipatePin 값은 1로 설정되어 있으며, 이는 요소가 도달해야 하는 위치보다 1개의 화면 높이만큼 앞서서 고정되도록 만듭니다. 이렇게 함으로써 고정 요소가 더 자연스럽게 화면에 고정되는 효과를 얻을 수 있습니다.

CODE
// 02 : 이미지 순차적으로 나오기
const ani2 = gsap.timeline();
ani2.from("#section-02 .img-1", {y: -100, autoAlpha:0, borderRadius: 200})
    .from("#section-02 .img-2", {y: 100, autoAlpha:0, borderRadius: 200})
    .from("#section-02 .img-3", {y: -100, autoAlpha:0, borderRadius: 200});
ScrollTrigger.create({
    animation: ani2,
    trigger: "#section-02",
    start: "top top",
    end: "+=2000",
    scrub: true,
    pin: true,
    anticipatePin: 1,
    markers: false
});
CODE
// 03 : 이미지 랜덤으로 떨어지기 
const ani3 = gsap.timeline();
ani3.from("#section-03 .img", {
    autoAlpha: 0,
    y: -100,
    ease: "back.out(4)",
    stagger: {
        amount: 3,
        from: "random"
    }
})
ScrollTrigger.create({
    animation: ani3,
    trigger: "#section-03",
    start: "top top",
    end: "+=3000",
    scrub: true,
    pin: true,
    markers: false,
    anticipatePin: 1
});
CODE
// 04 : 이미지 축소하기
const ani4 = gsap.timeline();
ani4.from("#section-04 .img", {
    autoAlpha:0, 
    scale: 5,
    width: "100vw",
    height: "100vh"
})
ScrollTrigger.create({
    animation: ani4,
    trigger: "#section-04",
    start: "top top",
    end: "+=2000",
    scrub: true,
    pin: true,
    markers: false,
    anticipatePin: 1
});
CODE
// 05 : 텍스트 애니메이션
const ani5 = gsap.timeline();
ani5.to("#section-05 .text1", {xPercent: 300}, "text")
    .to("#section-05 .text2", {xPercent: -300}, "text")
    .to("#section-05 .text3", {xPercent: 300}, "text")
    .to("#section-05 .text4", {xPercent: -300}, "text")

ScrollTrigger.create({
    animation: ani5,
    trigger: "#section-05",
    start: "top top",
    end: "+=2000",
    scrub: true,
    pin: true,
    markers: true,
    anticipatePin: 1
});
ANIMATION TEXT
ANIMATION TEXT
ANIMATION TEXT
ANIMATION TEXT
CODE
// 06 : 텍스트 확대하기
const ani6 = gsap.timeline();
ani6.to("#section-06 .text", {scale: 50, duration: 2, autoAlpha: 1})
    .to("#section-06 .text", {autoAlpha: 0})
ScrollTrigger.create({
    animation: ani6,
    trigger: "#section-06",
    start: "top top",
    end: "+=4000",
    scrub: true,
    pin: true,
    anticipatePin: 1,
    markers: false
});
ANIMATION TEXT
ANIMATION TEXT 1
ANIMATION TEXT 2
ANIMATION TEXT 3
ANIMATION TEXT 4
ANIMATION TEXT 5
ANIMATION TEXT 6
ANIMATION TEXT 7
CODE
// 07 : 텍스트 제자리 애니메이션
const ani7 = gsap.timeline();
ani7.from("#section-07 .text1", {autoAlpha: 0, duration: 1, y: 50}, "+=1")
    .from("#section-07 .text2", {autoAlpha: 0, duration: 1, y: 50}, "+=1")
    .from("#section-07 .text3", {autoAlpha: 0, duration: 1, y: 50}, "+=1")
    .from("#section-07 .text4", {autoAlpha: 0, duration: 1, y: 50}, "+=1")
    .from("#section-07 .text5", {autoAlpha: 0, duration: 1, y: 50}, "+=1")
    .from("#section-07 .text6", {autoAlpha: 0, duration: 1, y: 50}, "+=1")
    .from("#section-07 .text7", {autoAlpha: 0, duration: 1, y: 50}, "+=1")
ScrollTrigger.create({
    animation: ani7,
    trigger: "#section-07",
    start: "top top",
    end: "+=6000",
    scrub: true,
    pin: true,
    markers: false,
    anticipatePin: 1
});
CODE
// 05 : 텍스트 애니메이션
const ani5 = gsap.timeline();
ani5.to("#section-05 .text1", {xPercent: 300}, "text")
    .to("#section-05 .text2", {xPercent: -300}, "text")
    .to("#section-05 .text3", {xPercent: 300}, "text")
    .to("#section-05 .text4", {xPercent: -300}, "text")

ScrollTrigger.create({
    animation: ani5,
    trigger: "#section-05",
    start: "top top",
    end: "+=2000",
    scrub: true,
    pin: true,
    markers: true,
    anticipatePin: 1
});
ANIMATION TEXT
ANIMATION TEXT
ANIMATION TEXT
CODE
//09 : 이미지 확대하기
const ani9 = gsap.timeline();
ani9.to("#section-09 .img", {scale: 13})
    .to("#section-09 .img", {autoAlpha: 0})
ScrollTrigger.create({
    animation: ani9,
    trigger: "#section-09",
    start: "top top",
    end: "+=4000",
    scrub: true,
    pin: true,
    markers: false,
    anticipatePin: 1
});