2018年06月05日
時間差で(数秒ずつずらしながら)テキストを順番に出現させるテクニック
記事タイトルの通り。
トップページのメイン画像部分などでしばしば利用されるテクニックだ。
筆者も、「スライドショーを取り入れるほど有効な写真(画像)が複数あるわけではないが、1枚の背景写真をバックに多少のエフェクトをつけたい」という場合に取り入れている。
実装方法
jQuery
まずはjQueryに以下のように記述する。
$(window).on('load',function(){
$(function(){
setTimeout(function(){
$('.anime-catchcopy').addClass('active');
},1000);
});
});
読み込み完了時から数えて、setTimeoutで1秒遅らせて、「active」classを付与している。
1つめの文字が出現するまで1秒かかると解釈してほしい。
HTML
<div class="anime-catchcopy">
<p class="copy-1">下からほわ〜んと出現!</p>
<p class="copy-2">その0.5秒後に左からほわ〜んと出現!</p>
<p class="copy-3">その0.5秒後に右からほわ〜んと出現!</p>
</div>
CSS
最後に肝心のCSS。
.anime-catchcopy .copy-1,
.anime-catchcopy .copy-2,
.anime-catchcopy .copy-3 {
opacity: 0;
}
.anime-catchcopy.active .copy-1 {
-webkit-animation-name: copyFade1;
animation-name: copyFade1;
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-timing-function: ease;
animation-timing-function: ease;
-webkit-animation-delay: 0s;
animation-delay: 0s;
-webkit-animation-iteration-count: 1;
animation-iteration-count: 1;
-webkit-animation-direction: normal;
animation-direction: normal;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-play-state: running;
animation-play-state: running;
}
.anime-catchcopy.active .copy-2 {
-webkit-animation-name: copyFade2;
animation-name: copyFade2;
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-timing-function: ease;
animation-timing-function: ease;
-webkit-animation-delay: 0.5s;
animation-delay: 0.5s;
-webkit-animation-iteration-count: 1;
animation-iteration-count: 1;
-webkit-animation-direction: normal;
animation-direction: normal;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-play-state: running;
animation-play-state: running;
}
.anime-catchcopy.active .copy-3 {
-webkit-animation-name: copyFade3;
animation-name: copyFade3;
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-timing-function: ease;
animation-timing-function: ease;
-webkit-animation-delay: 1s;
animation-delay: 1s;
-webkit-animation-iteration-count: 1;
animation-iteration-count: 1;
-webkit-animation-direction: normal;
animation-direction: normal;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-play-state: running;
animation-play-state: running;
}
@keyframes copyFade1 {
0% {
opacity: 0;
-webkit-transform:translateY(20px);
transform:translateY(20px)
}
100% {
opacity: 1;
-webkit-transform:translateY(0px);
transform:translateY(0px)
}
}
@keyframes copyFade2 {
0% {
opacity: 0;
-webkit-transform:translateX(-40px);
transform:translateX(-40px)
}
100% {
opacity: 1;
-webkit-transform:translateY(0px);
transform:translateY(0px)
}
}
@keyframes copyFade3 {
0% {
opacity: 0;
-webkit-transform:translateX(40px);
transform:translateX(40px)
}
100% {
opacity: 1;
-webkit-transform:translateY(0px);
transform:translateY(0px)
}
}