スクロールした時に要素が可視範囲に入ったらフェードイン表示させる方法

今回ご紹介させていただく方法は、特定の要素が可視範囲に入ったタイミングでクラスを付ける(消す)スクリプトを実装し、cssで動きを付ける方法になります。

Jqueryを使用しますので、読み込んでください。

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>

特定の要素をしていします。今回は「sample」というIDが付いている要素を例に記載します。

$(function(){
  $(window).scroll(function (){
    $("#sample").each(function(){
      var imgPos = $(this).offset().top;
      var scroll = $(window).scrollTop();
      var windowHeight = $(window).height();
      if (scroll > imgPos - windowHeight + windowHeight/5){
        $(this).addClass("fade_on");
      } else {
        $(this).removeClass("fade_on");
      }
    });
  });
});

このスクリプトを読み込んだ状態でスクロールすると、可視範囲に入ったタイミングで「fade_on」というクラスが付与されるかと思います。(class名は仮ですのでお好きなclass名を指定してください)

次にcssを設定します。

jsで非表示にする設定も出来ますが、今回は分かりやすくなるように、特定の要素は事前にcssで非表示にしておきます。

.fade_off {
    opacity: 0;
    -webkit-transition: all 1s;
    -moz-transition: all 1s;
    -o-transition: all 1s;
    -ms-transition: all 1s;
    transition: all 1s;
}

.fade_on {
    opacity: 1;
}

以下HTMLの例です。

<section id="sample" class="fade_off">
  <p>この部分が表示非表示します</p>
</section>

これで事前にcssで非表示にしていた要素がスクロールで可視範囲に入ったタイミングでフェードインし、また可視範囲から出た場合はフェードアウトします。

スクロールイベントは使用するシーンは比較的多いので覚えておいて損はないでしょう。

Top