GSAP scrollTrigger + swiper === >:point_right: <font color="blue">緣由</font> > >使用 GSAP 試做如何達成此效果 >* 滾動滑鼠滾輪達成左圖右圖同時切換 >* 左文右圓圈同時切換 > > 範例效果: landor and fitch : https://landorandfitch.com/en --- ### 左文右圖 ![](https://hackmd.io/_uploads/Skb8V5pS2.jpg) #圖片擷取至 landor and fitch : https://landorandfitch.com/en ### 左文右圓圈 ![](https://hackmd.io/_uploads/ByPGNcTH3.jpg) #圖片擷取至 landor and fitch : https://landorandfitch.com/en --- >:bulb: <font color="blue">想法</font> > >使用GSAP scrollTrigger固定動畫執行位置 >搭配swiper滾輪onchange事件改變同時切換 ### 建置 目前先以CDN方式引入 <font color="orangered">css</font> ```css <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@9/swiper-bundle.min.css"> ``` <font color="orangered">javascript</font> ```javascript <script src="https://cdn.jsdelivr.net/npm/swiper@9/swiper-bundle.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js" integrity="sha512-3gJwYpMe3QewGELv8k/BX9vcqhryRdzRMxVfq6ngyWXwo03GFEzjsUm8Q7RZcHPHksttq7/GFoxjCVUjkjvPdw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="assets/gsap/gsap.js"></script> <script src="assets/gsap/scrollTrigger.js"></script> ``` --- ### GSAP方法 ```javascript gsap.registerPlugin(ScrollTrigger); gsap.to("目標物件", { opacity: 1, scrollTrigger: { trigger: "觸發物件", //觸發得物件 start: "center center", // (物件開始位置, 卷軸開始位置) top center bottom px end: "240%", //(物件結束位置, 卷軸結束位置) , 也可以設卷軸捲動多少結束動畫 scrub: true, // 物件動畫根據卷軸捲動程度跑 pin: true, // 物件執行完動畫會跟著卷軸走,類似 fixed-top markers: true, // 顯示標記 }, }); ``` ### 文字與圓圈切換 ```javascript var circle = document.getElementById('svgCircle'); var swiper = new Swiper('.c-swiper', { speed: 1000, direction: 'vertical', loop: false, mousewheel: { releaseOnEdges: true, }, pagination: { clickable: true, }, on:{ slideChange: function(){ // 針對目前輪到index去判斷改變右邊圓圈樣式 switch(this.activeIndex){ case 0: circle.style.transform = 'rotate(0deg)'; document.getElementById('yellow').style.transform = 'scale(1.06)'; document.getElementById('green').style.transform = 'scale(1)'; document.getElementById('blue').style.transform = 'scale(1)'; break case 1: circle.style.transform = 'rotate(60deg)'; document.getElementById('green').style.transform = 'scale(1.06)'; document.getElementById('yellow').style.transform = 'scale(1)'; document.getElementById('blue').style.transform = 'scale(1)'; break case 2: circle.style.transform = 'rotate(120deg)'; document.getElementById('blue').style.transform = 'scale(1.06)'; document.getElementById('green').style.transform = 'scale(1)'; document.getElementById('yellow').style.transform = 'scale(1)'; break default: return } }, }, }); ``` --- ### 問題與討論 1.動畫執行區間高度 2.左文又圓圈區塊觸發位置僅限文字區塊 --- ### Demo http://demo.grnet.com.tw/grnet_effect_collection/gsap_scrollTrigger/demo.html