Javascript

[GSAP] 스크롤 위치에 따라 탭메뉴 On & Off (ScrollTrigger)

jojv 2023. 3. 8. 17:37
728x90
반응형

애니메이션을 쉽게 구현할 수 있게 해주는 라이브러리인 gsap!!

 

gsap의 scrollTrigger를 이용하여

각각의 영역에 스크롤이 위치하게 되면 해당 탭메뉴가 On, 벗어나게 되면 Off 되도록 구현해 보았습니다!!

 

나름 알록달록 꾸며보았습니다ㅎㅎㅎ

 

<ul class="nav-list">
  <li>
    <a href="#main" class="item">Home</a>
  </li>
  <li><a href="#about" class="item">About</a></li>
  <li><a href="#work" class="item">Work</a></li>
  <li><a href="#contact" class="item">Contact</a></li>
</ul>

<div class="content">
  <div class="panel">panel-Home</div>
  <div class="panel">panel-About</div>
  <div class="panel">panel-Work</div>
  <div class="panel">panel-Contact</div>
</div>
.nav-list{position:fixed;top:0;left:0;width:150px;height:auto;background:#fff;}
.nav-list .item{display:block;text-decoration:none;color:#000;padding:10px;text-align:center;border:1px solid darkgreen;box-sizing:border-box;margin:2px 0;font-weight:bold;color:darkgreen;}
.nav-list .active .item{background:darkgreen;color:#fff;}

.content{width:100%;text-align:center;}
.content .panel{width:100%;height:100vh;line-height:100vh;}
.content .panel:nth-child(1){background:rgba(255,255,0,0.2)}
.content .panel:nth-child(2){background:rgba(255,255,0,0.4)}
.content .panel:nth-child(3){background:rgba(255,255,0,0.6)}
.content .panel:nth-child(4){background:rgba(255,255,0,0.8)}

HTML의 구조와 css는 위와 같습니다.

 

스크립트를 넣기 전에

cdn 넣었는지 꼭 꼭 체크해주셔야합니다!!ㅎㅎ

 

gsap.registerPlugin(ScrollTrigger, ScrollToPlugin);

var panel = document.querySelectorAll('.panel')
gsap.utils.toArray('.nav-list li').forEach((a, i) => {
  ScrollTrigger.create({
    trigger: panel[i],
    start: '20px 50px',
    end: 'bottom 50px',
    markers: { startColor: "fuchsia", endColor: "cyan"},
    toggleClass: { targets: a, className: "active" },
    onEnter: () => a.classList.add("active"),
    onLeaveBack: () => a.classList.remove("active")
  })
})

 

배열의 index 값을 활용하였습니다.

영역(panel)를 배열에 담아 각각의 영역 ( = panel[i] )이 trigger가 되고

start 와 end 사이에 스크롤이 위치하면 onEnter 이 실행되고, 벗어나면 onLeaveBack 이 실행됩니다.

 

글로 설명드리기 참으로 힘드네요...

조작해보시면 더욱 이해가 빠를거 같습니다.

 

See the Pen Untitled by Younjung Jeong (@jojv) on CodePen.

 

gsap... 뭔가 복잡하고 어려운 것 같으면서도

조금만 익숙해지면 정말 편리하게 다양한 애니메이션을 구현할 수 있을거 같습니다.

더 공부해서 오겠습니다!ㅎㅎ

 

 

수정할 점 등 댓글로 꼭 알려주세요. 많이 배우겠습니다!! : )

글 읽어주셔서 감사합니다.

728x90