こんにちは。
ゆうや(@yuyaphotograph)です!
この記事では、
- 「可視範囲までスクロールしたら画像が左から右にスライドインで表示されるようにするにはどうすればいいの?」
- 「黒色背景が先に表示されて後を追うようにめくれて画像が表示されるアニメーションを実装するにはどうするの?」
- 「任意の要素がスクロール画面に現れたらアニメーションさせるにはどうしたらいいの?」
という方のお悩みを解決します!
完成イメージの共有
実際に見たほうがイメージしやすいかと思いますので以下からご覧になってくださいまし(^o^)
HTML
さあ!早速作っていきましょう!
HTMLは以下をお使い下さい〜!
index.html
<a href="" class="Item">
<div class="Item-Box JS_ScrollItem">
<div class="Item-Box-ImgBox">
<div class="Item-Box-ImgBox-Img" style="background:url('./img/画像名') no-repeat center; background-size:cover;"></div>
</div>
</div>
</a>
画像は以前こちらの記事で紹介した方法でコーディングしております!
CSSで画像の縦横比を維持したまま表示させる方法【レスポンシブ対応】ポイントは、
- 実際に使うときをはリンクにすることが多いと思うので親要素はaタグで
- アニメーション用のクラス「JS_ScrollItem」を付与する
- 画像はimgタグではなく比率維持のためdivでコーディングする
などです!
CSS
今回のCSSはかなり長いです笑
以下お使い下さい!
index.css
.Item {
margin-top: 20px;/*なくてもOK*/
width: 40%;/*お好みで*/
}
@media screen and (max-width: 768px){
.Item {
width: 40%;
}
}
.Item-Box {
overflow: hidden;
}
.Item-Box-ImgBox {
overflow: hidden;
position: relative;
width: 100%;
-webkit-transform: translate3d(-100.5%,0,0);
transform: translate3d(-100.5%,0,0);
-webkit-transform-origin: left;
transform-origin: left;
-webkit-transition-duration: 1s;
transition-duration: 1s;
-webkit-transition-timing-function: cubic-bezier(.075,.82,.165,1);
transition-timing-function: cubic-bezier(.075,.82,.165,1);
-webkit-transition-delay: 0s;
transition-delay: 0s;
}
.Item-Box.isShow .Item-Box-ImgBox {
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
}
.Item-Box-ImgBox:before {
content: '';
display: block;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 2;
background-color: #000;/*黒ブロックの色指定*/
-webkit-transform: scaleX(1);
transform: scaleX(1);
-webkit-transform-origin: right;
transform-origin: right;
-webkit-transition-duration: 1s;
transition-duration: 1s;
-webkit-transition-timing-function: cubic-bezier(.075,.82,.165,1);
transition-timing-function: cubic-bezier(.075,.82,.165,1);
-webkit-transition-delay: .4s;
transition-delay: .4s;
}
.Item-Box.isShow .Item-Box-ImgBox:before {
-webkit-transform: scale(0,1);
transform: scale(0,1);
}
.Item-Box-ImgBox-Img {
width: 100%;
padding-top: 62.5%;/*画像比率指定*/
transition-duration: 4s;
-webkit-transition-timing-function: cubic-bezier(.075,.82,.165,1);
transition-timing-function: cubic-bezier(.075,.82,.165,1);
}
スクロールアニメーション
Javascriptで「一定の位置までスクロールしたらJS_ScrollItemにisShowクラスを付与する」という処理を書いて完成です!
index.js
$('.JS_ScrollItem').each(function(){
let $item = $(this);
$(window).on('scroll', function(){
let top = $item.offset().top; // ターゲットの位置取得
let position = top - $(window).height(); // イベントを発火させたい位置
if($(window).scrollTop() > position){
$item.addClass('isShow');
}
});
});
参考記事
参考 要素がスクロール画面に現れたらアニメーションさせるJS | デザインやWEBに関する情報を発信する【まるログ】 参考 jQueryとCSSのtransitionで可視範囲に入ってからアニメーションさせる方法Webparkまとめ
いかがでしたでしょうか。
モダンなWebサイト制作をする際に使用する機会があると思うので紹介させていただきました!
「他にもスクロール関係のTipsがあったら知りたい!」という方は以下の記事をチェックしてみてください〜