どうも!かけちまるです!
今回はjQueryで要素を順番にポンポンポンてな感じでアニメーションさせる方法を解説します。
今回目指すのはこんな感じのやつです。
See the Pen by kakechimaru (@kakechimaru) on CodePen.
こんなのCSSのtransition-delayをあてればいいじゃん!と思うかも知れません。
でも、
など一つずつtransition-delayをあてていくと地味に大変な作業だったりしませんか?
その作業はjQueryを数行書くだけでやらなくて良くなります。
さっそくHTML、CSS、jQueryのコードを紹介します。
HTMLは簡単な構造でbox
達をbox_wrap
で囲んでいるだけです。
HTMLコピー<div class="box_wrap"> <div class="box">サンプルボックス</div> <div class="box">サンプルボックス</div> <div class="box">サンプルボックス</div> <div class="box">サンプルボックス</div> <div class="box">サンプルボックス</div> <div class="box">サンプルボックス</div> <div class="box">サンプルボックス</div> <div class="box">サンプルボックス</div> <div class="box">サンプルボックス</div> <div class="box">サンプルボックス</div> </div>
CSSも軽く見栄えを整える程度です。.box
に.ready
を追加することでアニメーションさせたいので最初は.box
が見えないようにopacity: 0;
にしています。
CSSコピー.box_wrap{ margin-left: auto; margin-right: auto; width: 70%; } .box{ background: #e6e6e6; display: flex; align-items: center; justify-content: center; margin-top: 30px; width: 100%; height: 50px; opacity: 0; transform: translateY(20px); transition: all 0.8s cubic-bezier(0,1.2,1.0,1.0); } .box.ready{ opacity: 1; transform: translateY(0px); }
コードの後に何をしているか説明しています。
jQueryコピー$(window).on('scroll', function(){ let scrollTop = $(window).scrollTop(); let winH = $(window).height(); if($('.box_wrap').offset().top - winH * 0.5 < scrollTop){ $('.box_wrap').find('.box').each(function(index){ $(this).delay(index * 300).queue(function(){ $(this).addClass('ready'); }); }); } });
スクロールアニメーションについては理解しているとして割愛させていただきます。
スクロールアニメーションについてはこちらの記事が参考になるかも知れません。
7行目
each()
メソッドで.box_wrap
内の.box
の数だけ処理をします。
function
の引数であるindex
には、.box
のindex番号が入ります。
index番号は0からは始まります。
8行目
セレクタにはthis
を設定します。
ここではthis
はひとつひとつの.box
を指します。
delay()
メソッドでアニメーションを遅らせます。
index * 300
によって1番最初の.box
はindex
が0なので遅延は発生しません。
2番目の.box
からは300msずつ遅延する仕組みです。
queue()
メソッドで前に実行したアニメーションが終わってから次のアニメーションを実行します。
9行目
セレクタにはthis
を設定します。
ここでもthis
はひとつひとつの.box
を指します。
addClass()
メソッドで.box
に.ready
クラスを追加します。
おわり
フィードバックを送信
記事についてのフィードバックはTwitterかお問い合わせフォームから受け付けております。