JavaScriptによるスクロールエフェクトを試してみる
はじめに
今回紹介するjQUERYは、ずいぶん以前に作った物ですが、内容を今一度見直してみました。
jQUERYを使って、ウインドウが指定の位置までスクロールしたらテキストがスライドしながら表示されるという内容の物になります。
やりたいこと
- jQUERYを使用したスクロールエフェクトの実装
- 作成したJSファイルの解説
最初に言っておきたいこと
jQUERYを使ってテキストを動かすのが今回の目的ですが、実際にテキストを動かすのはJSファイルではありません。
今回のJSファイルはウィンドウが指定の位置までスクロールしたら対象に指定のcssを与えるという物で、そのcssにテキストを動かす指示をコーディングしていく形になります。
流れとしてはこうです。
- ウインドウが指定位置までスクロールする
- JSが動かしたい対象に新しいclassを与える
- 新しいclassが対象物を動かす
実際にコードを書くとこのようになります。
HTML
<div class="scrolleffect_up"> <p>上部へスライドエフェクト</p> </div>
CSS
.scrolleffect_up { transition: 2s; opacity: 0; } .scrolleffect_up_run { transform: translateY(-90px); opacity: 1; }
移動前のclassscrolleffect_up
と移動後のclassscrolleffect_up_run
の2つを用意します。
デフォルトはscrolleffect_up
が適用されています。それがウィンドウをスクロールさせることでscrolleffect_up_run
を付与させ、transform: translateY(-90px);
で上方向へ90pxアニメーションさせます。
あわせて透過度opacity
も指定することで、だんだん浮かび上がってくるようなアニメーションになります。
jQUERY
$(function() { $(window).scroll(function (){ $('.scrolleffect_up').each(function(){ var POSITION = $(this).offset().top; var scroll = $(window).scrollTop(); var windowHeight = $(window).height(); if (scroll > POSITION - windowHeight){ $(this).addClass('scrolleffect_up_run'); } else { $(this).removeClass('scrolleffect_up_run'); } }); }); });
このJSファイルをに解説を入れた物が以下になります。
コメントアウトは上の行を解説しています。
$(function() { $(window).scroll(function (){ //ウインドウがスクロールされたら以下の行の処理を実行する $('.scrolleffect_up').each(function(){ //class"scrolleffect_up"に以下の処理を(順番に)実行する var POSITION = $(this).offset().top; //[offset().top]でページ最上部からthis(scrolleffect_up)までの距離を取得する。その値を変数「POSITION」に代入する。 var scroll = $(window).scrollTop(); //[scrollTop()]でスクロールした量を取得する。その値を変数[scroll]に代入する var windowHeight = $(window).height(); //「.height()」でウインドウの高さを取得する。その値を「windowHeight」に代入する if (scroll > POSITION - windowHeight){ //スクロールした量 > 「ページの最上部からscrolleffect_upまでの距離」 - 「ウィンドウの高さ」となった時(ページの表示領域がscrolleffect_upまで到達した時) $(this).addClass('scrolleffect_up_run'); //[scrolleffect_up]に[scrolleffect_up_run]というclassを与える } else { //偽の時(そうじゃない時)は $(this).removeClass('scrolleffect_up_run'); //[scrolleffect_up]から[scrolleffect_up_run]というclassを削除する } }); }); });
という訳で実際に作成したデモがこちらです。
デモはこちら