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',
  });
});
*/
          

Gallery Nuxt.ver

Copyright 2024 mugikomugi All Rights Reserved. 無断転載禁止
TOPへ