スムーススクロールとフェードイン・アウトアニメーションを組み合わせたウェブページナビゲーション

ウェブページのナビゲーションを向上させるために、スムーススクロールとフェードイン・アウトアニメーションを組み合わせた効果を実装する方法を紹介します。この記事では、Anime.jsとGSAPという2つの人気のJavaScriptアニメーションライブラリを使用して、この効果を実現する方法を説明します。

コードの解説

まず、以下のコードを見てみましょう。


(function () {
function smoothScroll(event, targetY, fade = false) {
  event.preventDefault();
  const timeline = gsap.timeline();

  timeline.to('html, body', { duration: 1, scrollTop: targetY, ease: 'easeOutCubic' }, 0);
  if (fade) {
    timeline.to('body', { duration: 0.3, opacity: 0 }, 0.1)
      .to('body', { duration: 0.3, opacity: 1 }, 0.6);
  }

  timeline.play();
}

function addSmoothScrollListener(selector, fade = false) {
  let elements = Array.prototype.slice.call(document.querySelectorAll(selector));
  for (let i = 0; i < elements.length; i++) {
    elements[i].addEventListener('click', event => {
      const targetElement = document.getElementById(elements[i].getAttribute('href').replace('#', ''));
      if (targetElement) {
        const targetY = targetElement.getBoundingClientRect().top + window.scrollY - 60;
        smoothScroll(event, targetY, fade);
      } else {
        console.warn(`Element with ID '${elements[i].getAttribute('href').replace('#', '')}' not found.`);
      }
    });
  }
}
addSmoothScrollListener('a[href^="#"]:not(.tabs-link):not(.fade-link)');
addSmoothScrollListener('a[href^="#"].fade-link', true);
})();

関数 smoothScroll

この関数は、スムーススクロールとフェードイン・アウトアニメーションを行います。GSAPのタイムラインを使用して、htmlとbody要素をターゲットY位置までスムーススクロールさせます。fadeパラメータがtrueの場合、body要素の透明度を変更してフェードアウトとフェードインのアニメーションを追加します。

関数 addSmoothScrollListener

この関数は、指定されたセレクターを持つすべての要素にクリックイベントリスナーを追加します。要素がクリックされると、smoothScroll関数が呼び出され、適切なスクロールとフェードアニメーションが行われます。

まとめ

このコードスニペットは、ウェブページにスムーススクロールとフェードイン・アウトアニメーションを簡単に追加する方法を示しています。Anime.jsとGSAPは、ウェブページのアニメーションを簡単かつ効果的に実装するための強力なツールです。このコードを使用して、ウェブサイトのユーザーエクスペリエンスを向上させることができます。