GSAP CODE
TOPページで適用したGSAP用コードです。スクロールトリガーのプラグインも使いました。
様々な動きによって専用プラグインも豊富に揃えられて、動作の仕組みに慣れるのに少し時間がかかりました。
組み合わせによって色々なバリエーションが組めるので、LPやプロモーションサイトだったらかなり重宝しそうです。
//js const elements = document.querySelectorAll('.animeText'); elements.forEach((elem) => { const word = elem.textContent; //console.log('word', word); elem.innerHTML = ''; //wordごとにspanで囲む word.split(' ').forEach(function (c) { elem.innerHTML += '<span class="word">' + c + '</span>'; }); //textごとにspanで囲む let words = elem.querySelectorAll(".word"); words.forEach((word) => { const text = word.textContent; word.innerHTML = ''; text.split('').forEach(function (c) { word.innerHTML += '<span class="letter">' + c + '</span>'; }); const letter = elem.querySelectorAll(".letter"); gsap.set(letter, { y: 100, autoAlpha: 0 }); //textアニメーション gsap.to(letter, { y: 0, autoAlpha: 1, duration: 0.5, ease: 'power3.out', stagger: 0.03, scrollTrigger: { trigger: elem, start: 'top center', end: 'bottom center', toggleActions: 'play none none reverse', } }); }); }); //forEachうまく差し込めないので個別で const boxShow = (box, trg) => { gsap.set(box, { y: 40, autoAlpha: 0 }); gsap.to(box, 1, { y: 0, autoAlpha: 1, scrollTrigger: { trigger: trg, start: '20px', toggleActions: 'play none none', } }); } boxShow('.eBox1', '#header'); boxShow('.eBox2', '#section1'); boxShow('.eBox3', '#section2'); boxShow('.eBox4', '#section3'); boxShow('.eBox5', '#section4'); //パララックス /*これNuxt3でエラーになるので外した let panels = gsap.utils.toArray(".panel"); panels.forEach((panel, i) => { ScrollTrigger.create({ trigger: panel, start: () => panel.offsetHeight < window.innerHeight ? "top top" : "bottom bottom", pin: true, pinSpacing: false, toggleActions: 'play none none reverse', }); }); */