
以前の記事「左右無限ループをcssで版とjquery版を検証してみた」で横方向を試しましたが、今回は縦ほ方向の無限スクロールをメモします。

仕様
上から下にいく動かし、さらにそれぞれのイメージをディレイアニメーションでループさせます。
HTML
HTMLを用意します。
<div class="loop_area"> <div class="loops"> <p><img src="img/1.jpg"></p> </div> <div class="loops"> <p><img src="img/2.jpg"></p> </div> <div class="loops"> <p><img src="img/3.jpg"></p> </div> <div class="loops"> <p><img src="img/4.jpg"></p> </div> </div>
CSS
CSSは以下です。
.loop_area {
width: 100%;
height:100vh;
overflow: hidden;
position:relative;
}
@keyframes loop_animation {
0% {
transform: translateY(-100%);
}
50% {
transform: translateY(120%);
}
100% {
transform: translateY(300%);
}
}
.loops {
position:absolute;
top:0;
}
.loops:nth-child(1) {
animation: loop_animation 8s linear infinite;
left:-30%;
z-index:20;
}
.loops:nth-child(2) {
animation: loop_animation 12s linear infinite;
left:-10%;
}
.loops:nth-child(3) {
animation: loop_animation 14s linear infinite;
right:0%;
z-index:5;
}
.loops:nth-child(4) {
animation: loop_animation 10s linear infinite;
right:-30%;
z-index:10;
}
基本的にはこれだけで実装できます。
@keyframesでloop_animationに上下に動くアニメーションを設定します。
あとはloopsに適用し、擬似クラスで各種イメージに時間、動きとループであるinfiniteを設定するだけです。
ただレスポンシブへの対応はheightなど多少のチューニングは必要です。loops:nth-child(1)から順番にループしているものを、ちょっと強引にディレイしているので、途中でイメージがブツっと切れることもあるので注意が必要です。
まとめ
ヒーローイメージなんかでちょっと面白いアプローチができそうなギミックです。
しっかりとイメージを見せたいと思う場合は適していないと思いますが、遊び心のあるサイトで応用できそうです。
ホバー時にアニメーションを止めるプロパティと組み合わせるなど、animationプロパティから目が離せませんね。