スクロールでふわっと表示(jQuery + CSS)

Tips

みなさん、こんにちは、フロントエンドエンジニアのやまもとです。
今回は昨今、色々なサイトで見かける、
「スクロールして要素が画面の中に入った時にフェードインする」
という感じのエフェクトについて書いて見ようかと思います。
この処理は簡単な処理なのですが、
やり方しだいで色々と応用が効くので、覚えておくと便利かと思います。
今回の処理は3ステップ

  1. スクロールの量を取得する(「scrollTop()」を使用)
  2. 要素のドキュメント上の位置を取得する(「offset()」を使用)
  3. 1と2の値を比較して画面に入ったかどうかを判定する

1. スクロールの量を取得する(「scrollTop()」を使用)

こちらタイトルの通りの処理なのですが、jQueryで用意されている
便利���メソッドのscrollTop()を利用して、
今、どれくらいスクロールしたかを取得します。
また、スクロールごとに処理をさせるために、
同じくjQueryのon()メソッドを使って、
スクロールが行われるごとに発生するscrollイベントに
紐付けて処理を行わせます。

JS

$(function(){
// スクロールごとに処理をさせる
$(window).on('scroll',function(){
// スクロール毎の処理
// スクロール量を取得
var scroll_top = $(window).scrollTop();
});
});

2. 要素のドキュメント上の位置を取得する(「offset()」を使用)

次に目的の要素ののドキュメント上の位置を取得します。
目的の要素には任意のクラスには(今回は「effect」)を付与し、
jQueryのメソッドoffset()を利用して、
ドキュメント上の位置を取得します。

HTML

<div class="effect">
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
この文章はダミーです。文字の大きさ、
</div>
<div class="effect">
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
この文章はダミーです。文字の大きさ、
</div>
<div class="effect">
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
この文章はダミーです。文字の大きさ、
</div>
<div class="effect">
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
この文章はダミーです。文字の大きさ、
</div>

CSS

div {
width : 400px;
height : 400px;
margin-bottom: 50px;
}
div:nth-of-type(2n) {
color: #FFFFFF;
background-color:#2D579A;
}

JS

$(function(){
// スクロールごとに処理をさせる
$(window).on('scroll',function(){
// スクロール毎の処理
// スクロール量を取得
var scroll_top = $(window).scrollTop();
// eachを利用して「effect」クラスの要素それぞれに処理を行なう
$('.effect').each(function(){
// 要素のドキュメント上の位置を取得
var offset_top = $(this).offset().top ;
});
});
});

3. 1と2の値を比較して画面に入ったかどうかを判定する

最後に取得した2つの値を比較して、画面上に要素が入ったかどうかを判定します。
今回は画面上に登場した要素に対して「fadein」というクラスを付与し、
CSSのtransitionを使ってアニメーションを実装します。
また、画面上端ででアニメーションを開始するというパターンは少ないかと思いますので、
比較の際にスクロール量に対してのマージンを設けています。
最後の例はcodepenで、
※ HTMLは同じです。それぞれの要素にはアニメーションをわかりやすくするために色をつけています。

See the Pen スクロールしてフレームインした時にフェードインなどさせたい場合の処理(jQuery) by Shinji Yamamoto (@commono_yamamoto) on CodePen.

今回はCSSのクラスのつけはずしでアニメーションを行いましたが、
要素ごとに同じクラスで別の動きをさせたり、
jQueryでアニメーションさせたりすることもできますので、
ぜひトライしてみてくださいね!

お問い合わせ

    個人情報利用目的への同意

    ※このサイトはreCAPTCHAとGoogleによって保護されています。プライバシーポリシー利用規約が適用されます。
    ※お客様が入力した個人情報はSSL暗号化信号によって保護されています。

    個人情報の利用目的
    このお問い合わせフォームでご提供いただく個人情報は、お問合せ等に対する回答や資料送付、その他ご連絡のために利用します。
    当個人情報を第三者に提供することはありません。
    当個人情報の取扱いを委託することはありません。
    必要事項を全てご入力下さい。入力内容に不備がある場合は、ご返信しかねる場合がございます。
    内容により、お時間をいただく場合がございます。
    当個人情報の利用目的の通知、開示、内容の訂正・追加または削除、利用の停止・消去および第三者への提供の停止(「開示等」といいます。)を受け付けております。
    開示等の求めは、info@commono.co.jpで受け付けます。
    統計ツールやクッキー、ウェブビーコン等を用いてご利用状況を調査していますが、これによる個人情報の取得、利用は行っておりません。
    当社の個人情報保護に対する取り組みは「Privacy Policy」を必ずご確認ください。

    COMMONO株式会社
    E-mail:info@commono.co.jp
    個人情報保護方針、個人情報の取扱いについて
    PRIVACY POLICY

    現在準備中です

    お気に入り

    お気に入りから削除

    選択したアイテムをお気に入りから削除しますか?