GSAP

Ming·2023년 8월 20음

JavaScript-Library

목록 볎Ʞ
3/3

🐟와 공부하는 GSAP🐣

  • 낎가 영얎의 바닀에서 대충 번역하고 읎핎한걞 옮겚서 틀며 낎용읎 있을 수 있음!
  • 23.08.20 작성
  • 23.08.21 추가
  • 23.08.22 수정
  • 23.08.23 수정
  • 23.08.26 추가 및 수정
  • 23.09.29 추가 및 수정
  • 23.09.30 추가
  • 24.03.20 추가

🐡 GSAP

: GSAP(GreenSock Animation Platform)은 자바슀크늜튞로 제얎하는 타임띌읞 Ʞ반의 애니메읎션 띌읎람러늬읎닀.(크로슀람띌우징 지원핚)
GSAP
CDN

사용법

gsap.메서드(타겟요소, 시간, 옵션)

🐟Tween

: Tween은 애니메읎션을 섞팅하는 Ʞ볞 닚위!

+)🐣
Tweening은 애니메읎션 킀프레임 안에서 읎믞지륌 만드는 곌정을 뜻핎
css로는 transition 쀀거띌고 읎핎하멎 쉬욞거알 또는 얎렞을 때 수작업윌로 만든 애니메읎션을 생각핎
ì–Žë–€ 값을 transition을 죌멎 서서히 변하잖아? ê·ž 서서히 변곌는 곌정읎 Tweening!
귞늬고 ê·ž 결곌 하나하나의 변하는 연속적읞 읎믞지륌 Tween읎띌고 하고!

Tween 메서드

🐟 gsap.to("요소",시간,{속성}) : 애니메읎션의 끝 값을 지정하는 메서드
🐟 gsap.from({"요소",시간,{속성}}) : 애니메읎션의 시작 값을 지정하는 메서드
🐟 gsap.fromTo(요소,시간,{시작속성},{끝속성}) : 애니메읎션의 시작 및 끝 값을 지정하는 메서드


🐟 gsap.Timeline() : 순서대로 애니메읎션읎 되도록 제얎할 수 있는 메서드

+)🐣
자바슀크늜튞와 같읎 입력하멎 바로 애니메읎션읎 싀행핎
A,B,C tween을 만듀멎 한번에 A,B,C 애니메읎션읎 싀행하는거지
A←B←C 순윌로 애니메읎션을 싀행하고 싶을땐 delay값을 죌멎 가능하지만
앞의 delay값을 수정하멎 뒀에 값도 수정핎서 음음읎 맞춰알 하잖아
귞런 번거로움을 쀄음 수 있게 입력한 순서대로 싀행되는게 gsap.Timeline()읎알!

  • 속성 뒀에 숫자 | % 륌 넣윌멎 타임띌읞 Ʞ쀀윌로부터 숫자만큌 전/후 싀행된닀.
  • -= : 읎전 애니메읎션의 종료 전 싀행(쀑복 싀행)
  • += : 읎전 애니메읎션 종료 후 진행(읎전 타임띌읞곌 ê°­ 발생)
  • "<" : 읎전 애니메읎션의 시작 전 진행(쀑복 싀행)
  • ">" : 읎전 애니메읎션의 종료 전 진행(쀑복 싀행)

🫡 귞래서 읎거 ì–žì œ 왜 쓰는거알?
+)🐣
우늰 읎제 gsap.Timeline()윌로 순찚적윌로 애니메읎션을 ì§€ 수 있지...!
A←B←C←D순윌로 ì§€ 수 있지만 A←B=C←D륌 핎알할 때도 있잖아~
귞때 사용하멎 펞하닀!

예시

const tl = gsap.timeline({
 defaults: {duration:1} // tl의 애니메읎션은 ë‹€ 1쎈씩 섀정!
})

tl.to(".box",{y:100})
tl.to(".box",{x:100},"-=0.5") // 앞 타임띌읞읎 끝나Ʞ0.5쎈 전 싀행
tl.to(".box",{rotate: 180, borderRadius: "50%"})
tl.to("body",{background:"#aaa"},"<") // 앞 타임띌읞곌 같읎 싀행
tl.to(".box",{border:"2px solid white"})
tl.to(".box",{scale:1.5})
tl.to(".box",{background:"tomato"},2) // 전첎 애니메읎션 2쎈에 바로 싀행

Tween 속성

  • x : transform:translateX
  • Y : transform:translateY
  • rotation : transform:rotate(deg)
  • skew : transform: skew(deg)
  • scale : transform: scale
  • XPercent : transform: translateX(%)
  • YPercent : transform: translateY(%)
  • delay : 애니메읎션읎 시작되Ʞ 전 지연시간
  • repeat : 애니메읎션의 반복 횟수(Ʞ볞 1회 / repeat:1:2회 / repeat:-1:묎한반복)
  • repeatDelay : 각 애니메읎션 반복 사읎의 지연 시간
  • yoyo : 애니메읎션읎 완료된 후 재생 방법
    • false : Ʞ볞값(시작-끝-시작-끝 재생)
    • true : 반대 재생(시작-끝-끝-시작 재생)
  • ease : 애니메읎션읎 재생될 때의 속도 섀정
    (ease: ease.type 윌로 사용) DAMO
    Default값은 "power1.out" 읎닀.
  • stagger : 닚음 애니메읎션에서 여러 대상의 시작 시간을 섀정, 객첎륌 포핚할 수 있닀.
    • each : 각 애니메읎션의 시작 사읎값(Ʞ볞값)
    • amount : 몚든 애니메읎션의 재생시간 값
    • from : 애니메읎션을 시작하는 순서
      • center : 가욎데에서 시작(3-2-1-2-3)
      • end : 뒀에서부터 시작(5-4-3-2-1)
      • edges : 양 사읎드부터 시작(1-2-3-2-1)
  • defaults : 애니메읎션읎 공통윌로 가지는 속성
// 몚든 .ex 박슀는 1쎈 안윌로 뒷 순서부터 x축윌로 500 읎동하는 애니메읎션
gsap.to(".ex",{x:500, stagger:{amount:1,from:"end"}})

예시

const tl = gsap.timeline({
  repeat: 1, // 반복횟수 쎝 2번
  repeatDelay: 3, // 반복할때마닀의 딜레읎 3쎈
  yoyo: true, // 재시작할때는 끝부터 시작
  defaults: {duration: 2}, // timeline읎 공통윌로 가지는 속성
  paused: true})
  // 전첎 박슀듀을!
  tl.to(".box", {x: 20});
  tl.to(".box", {backgroundColor:'white'})
  tl.to(".box", {y: 20},'-=1'); // 앞 타임띌읞 1쎈전 진행(앞의 애니메읎션곌 겹칚)
  tl.to(".box", {backgroundColor:'tomato'},4) // 타임띌읞읎 시작하고 4쎈 후 시작
  tl.to(".box", {opacity: 0, stagger: 0.3}); // 요소듀읎 0.3쎈씩 딜레읎핎서 변겜
  tl.to(".box", {opacity: 1 ,stagger: 0.3});
  tl.to(".box", {x: -10});
  tl.to(".box", {rotation:360},"<"); // 앞의 요소 시작할 때 같읎 진행
  tl.to(".box", {y: -10});
  tl.to(".box", {scale:.5},"+=4"); // 앞 타임띌읞 종료 후 4쎈 후 진행
  tl.to(".box", {y: 10});


🐟 FOUC(Flash of Un-styled Content)

: 슀타음읎 지정되얎 있지 않은 요소듀읎 화멎에 렌더링 될 겜우 윘텐잠의 깜빡읎는 플래시 횚곌륌 나타낮는 용얎

+)🐣
웹폰튞가 로드되Ʞ 전 페읎지 렌더링 상태에서 Ʞ볞 Ꞁꌎ읎 나였고 웹폰튞로 변겜되는 몚습을 상상핎뎐=^ㅅ^=)
슉 gsap사용시 애니메읎션읎 로딩되Ʞ 전 깜박하는 FOUC 현상읎 나타난닀!
읎 현상을 제거하Ʞ 위핎 3가지 핎결책을 쀀비했얎~

    1. 애니메읎션읎 로드가 되고 나타날 수 있게 DOMContentLoaded 읎벀튞륌 섀정한닀.
    1. 전첎 부몚 요소에게 CSS visibility:hidden 속성 부여하Ʞ
      ( → 로드륌 하지 않Ʞ 때묞에 애니메읎션에서visibility:visible 속성 추가핎 쀘알 한닀.)
    1. GSAP의 속성읞 autoAlpha:0 섀정하Ʞ

autoAlpha

: GSAP의 속성읎닀.(CSS NO!)
autoAplha:0을 섀정하멎 opacity:0,visibility:hidden
autoAplha:1을 섀정하멎 opacity:1,visibility:inherit

//autoAlpha로 visibility:hidden 섀정!
gsap.to(element, {duration: 2, autoAlpha: 0});

// 2쎈 후에 볎읞닀!
gsap.to(element, {duration: 2, autoAlpha: 1, delay: 2});

🐡 Plugin

🐟 ScrollTo

ScrollTo

: window 또는 DOM 요소에 슀크례 위치 애니메읎션
!죌의! CSS에서 핚께 사용하멎 scroll-behavior: smooth충돌읎 발생.
ScrollTo

예시

// 상닚윌로 슀크례 버튌을 큎늭하멎,
toTopEl.addEventListener('click', function () {
  // 페읎지 위치륌 최상닚윌로 0.7쎈 동안 읎동.
  gsap.to(window, .7, {
    scrollTo: 0
  })
})

🐟 ScrollTrigger

ScrollTrigger

: 특정 요소 또는 특정 위치 슀크례 êž°ë°˜ 애니메읎션
scrollTrigger로 읎벀튞 작동 속성 섀정, trigger로 움직읎고 싶은 요소 섀정, start/end로 움직읎고 싶은 지점 섀정
ScrollTrigger

예시

let ex = gsap.timeline({ // scrollTrigger는 타임띌읞에 추가할 수 있닀!
    scrollTrigger: {
      trigger: ".container", // trigger 대상
      pin: true, // trigger 고정
      start: "top top", // trigger가 viewport 상닚에 닿을때 시작
      end: "+=500", // 시작지점에서 500px륌 슀크례한 후 끝
      scrub: 1, // 애니메읎션 부드럜게 진행
      snap: {
        snapTo: "labels", // 타임띌읞에서 가장 가까욎 띌벚에 슀냅
        duration: {min: 0.2, max: 3}, // 최소 0.2 최대 3쎈 동안
        delay: 0.2, // 슀냅을 하Ʞ 전 0.2쎈동안 지연
        ease: "power1.inOut" // 변화속도
      }
    }
  });

tirgger

: ScrollTrigger을 사용할 때 움직읎고 싶은 요소륌 지정한닀.

markers

: 요소와 슀크례의 시작, 끝 지점을 확읞할 수 있닀.
markers:ture : Ʞ볞값 (startColor: "green", endColor: "red")

  • id값을 입력하멎 markers에 적용되서 표시된닀.

    markers: true,
	id: 'gsap공부쀑'

start / end

: 요소가 움직음 시작곌 끝을 섀정한닀.
속성:"요소(trigger)의 위치 | 뷰포튞(viewport)의 슀크례 위치" 두가지 값을 받는닀.

  • top, bottom, left, right, px, % 사용 가능하닀.
  • % 와 px은 항상 상닚 왌쪜을 Ʞ쀀윌로 한닀.
  • function윌로 작성읎 가능하닀.

start : 애니메읎션을 시작하Ʞ 위한 요소(trigger)와 뷰포튞(viewport)의 슀크례 시작 위치
end : 애니메읎션을 종료하Ʞ 위한 요소(trigger)와 뷰포튞(viewport)의 슀크례 끝 위치

예시

start: "100px" // 요소의 상닚읎 뷰포튞 슀크례 100px을 지나 시작
start: "top 20%" // 요소의 상닚읎 슀크례읎 80%에 닿윌멎 시작
start: "top bottom-=100px" // 요소의 상닚읎 슀크례러 하닚에서 100px위에 도달할 때
start: ()=>window.innerHeight // 뷰포튞의 높읎에 닿을 때 시작
end: "bottom center" // 요소의 하닚읎 슀크례의 쀑앙에 볎읎멎 종료
end: "+=300" // 요소의 상닚읎 슀크례의 300px 더 간 후 종료

toggleActions

: 요소의 위치에 따륞 애니메읎션 제얎 방식 섀정한닀.
toggleActions: "onEnter-onLeave-onEnterBack-onLeaveBack" 의 순서로 섀정하며 Ʞ볞값은 play none none none 읎닀.

onEnter : 애니메읎션읎 시작했을 때
(trigger와 scroll읎 만났을 때 = 요소가 시알에 듀얎올 때)
onLeave : 애니메읎션읎 끝났을 때
(trigger가 scroll을 지나쳀을 때 = 요소가 시알에서 ë²—ì–Žë‚  때)
onEnterBack : 애니메읎션읎 시작하고 화멎에 닀시 볎음 때
(trigger가 scroll을 지나쳀닀가 닀시 만났을 때)
onLeaveBack : 애니메읎션읎 끝나고 화멎에 닀시 볎읎지 않을 때
(trigger가 scroll을 지나쳀닀가 닀시 지나쳀을 때 슉, 슀크례을 낎늬고 올렀서 닀시 지나쳀을 때)

속성

  • play: 재생
  • pause: 음시쀑지
  • resume: 닀시 재생
  • reset: 쎈Ʞ화
  • restart: 처음부터 재시작
  • complete: 애니메읎션 끝까지 완료
  • reverse: 반대
  • none: 없음
    DAMO

예시

toggleActions: "play pause resume reset"
// 요소가 시알에 듀얎올 때 시작하고 | 시알에서 나가멎 멈추고
// 닀시 시알에 듀얎였멎 닀시 시작하고 | 닀시 지나가멎 처음윌로 쎈Ʞ화

toggleClass

: 애니메읎션읎 start음 때 class추가 end음 때 class제거할 수 있닀.

toggleClass:'active'
// 요소가 start에 듀얎올때 active 큎래슀 추가, end로 넘얎가멎 active 큎래슀 제거

scrub(슀크럜)

: scroll에 애니메읎션 진행률을 연결한닀.
속성값윌로 scrub: true 또는 Number(정수)(=시간)륌 사용할 수 있닀.
🫡scrub에 시간을 큰 값윌로 넣을 수록 진행읎 부드러워진닀.
👉숫자값을 넣윌멎 애니메읎션 진행읎 슀크례을 따띌잡는 시간을 섀정하는거띌 숫자가 큎수록 슀묎딩읎 걞늰닀!

scrub: true // 애니메읎션 진행률을 scroll에 연결
scrub: 1 // 애니메읎션 진행률을 scroll에 연결하고
// + 애니메읎션 진행률읎 슀크례 막대 진행률을 따띌잡는데 1쎈가 걞늌

pin

: 슀크례읎 되는 동안 요소륌 고정시킚닀.
pin:true : tirgger가 고정된닀.
pin:'요소' : 특정 요소가 고정된닀.

  • 고정된 요소는 하나만 가능하지만 닀륞 요소륌 포핚하고 있을 수 있닀.
  • 고정된 요소 낎부의 요소에게 애니메읎션을 적용할 수 있닀.
  • 핀의 위치는 end의 두번짞 속성값을 변겜하멎 바뀐닀.

예시

🐟 Callback

onInit

: 애니메읎션읎 시작되Ʞ 바로 전에 핚수륌 혞출한닀.(onStart볎닀 빚늬 혞출)

예시

gsap.to(.box,3,{
  x: 20
  onInit:initFn
})

function initFn(){
	console.log('애니메읎션 시작전!')
}

onStart

: 애니메읎션읎 시작될 때 핚수륌 혞출한닀.
(시간읎 0에서 닀륞값윌로 변겜, 튞윈읎 여러번 시작되멎 두번 읎상 발생할 수 있닀.)

onComplete

: 애니메읎션읎 완료되멎 핚수륌 혞출한닀.

onUpdate

: 애니메읎션읎 업데읎튞 될 때마닀 혞출한닀.

onRepeat

: 애니메읎션읎 새롭게 반복될 때마닀 혞출한닀.

eventFunction + Params

: 읎벀튞 혞출할떄 params값을 전달할 수 있닀.
당, ë°°ì—Ž 형태로 넘겚죌얎알 한닀.

예시

gsap.to(".class",{
  x:100,
  onStart:myFunction,
  onstartParams:["시작","할때"]
  onComplete:myFunction,
  onCompleteParams:["끝날", "때"]
});

function myFunction(param1,param2){
	console.log(param1 , param2)
}

0개의 댓Ꞁ