JavaScript初心者です。簡単なアニメーションを作りたいのですが実装方法がわからず困っています。
やりたいこと
4枚の画像が0.1秒毎にズームしながら切り替わり、0.5秒毎に(または5回目の処理で)ズームしながら画像を3秒間表示する。
説明が分かりにくくすみません。つまり、
1.png→2.png→3.png→4.png→1.png→2.png…の順で0.1秒ごとにパッパッパっと画像が切り替わって、一周して1.pngに戻ってきた時に3秒表示。またパッパっと切り替わって2.pngに来た時に3秒表示…みたいなものが作りたいです。
試したこと
ズームしながら0.1秒毎に切り替えまでは調べて分かりましたが、「0.5秒毎に3秒表示」の部分がつまっています。
なんとなくsetTimeoutを使うんだろうということは分かるのですが書き方が分からず、ご教授頂けないでしょうか。
動きの部分はcssで行っています。また、フェードインと記載してますが実際はフェードではなく切り替わる感じにしています。
ソースコード
html
1 <ul id="slide_wrapp"> 2 <li class="slide_item"><img src="img/1.png" alt=""></li> 3 <li class="slide_item"><img src="img/2.png" alt=""></li> 4 <li class="slide_item"><img src="img/3.png" alt=""></li> 5 <li class="slide_item"><img src="img/4.png" alt=""></li> 6 </ul>
css
1 #slide_wrapp{ 2 position: relative; 3 overflow: hidden; 4 padding: 0; 5 width: 500px; 6} 7 .slide_item{ 8 opacity: 0; 9 transform: scale(1); 10 transition: opacity 0.01s linear, transform 1s linear; //秒数に注意 11 position: relative; 12 z-index: 1; 13} 14 .slide_item:not(:first-child){ 15 position: absolute; 16 top: 0; 17 left : 0; 18} 19 .slide_item.show_{ 20 opacity: 1; 21} 22 .slide_item.zoom_{ 23 transform: scale(1.02); 24} 25 .slide_item img{ 26 display: block; //下に余白ができないように 27}
js
1 function sliderStart() { 2 3 const slide = document.getElementById('slide_wrapp'); //スライダー親 4 const slideItem = slide.querySelectorAll('.slide_item'); //スライド要素 5 const totalNum = slideItem.length - 1; //スライドの枚数を取得 6 const FadeTime = 1000; //フェードインの時間 7 const IntarvalTime = 1000; //クロスフェードさせるまでの間隔 8 let actNum = 0; //現在アクティブな番号 9 let nowSlide; //現在表示中のスライド 10 let NextSlide; //次に表示するスライド 11 12 // スライドの1枚目をフェードイン 13 slideItem[0].classList.add('show_', 'zoom_'); 14 15 // 処理を繰り返す 16 setInterval(() => { 17 if (actNum < totalNum) { 18 19 let nowSlide = slideItem[actNum]; 20 let NextSlide = slideItem[++actNum]; 21 22 //.show_削除でフェードアウト 23 nowSlide.classList.remove('show_'); 24 // と同時に、次のスライドがズームしながらフェードインする 25 NextSlide.classList.add('show_', 'zoom_'); 26 //フェードアウト完了後、.zoom_削除 27 setTimeout(() => { 28 nowSlide.classList.remove('zoom_'); 29 }, FadeTime); 30 31 } else { 32 33 let nowSlide = slideItem[actNum]; 34 let NextSlide = slideItem[actNum = 0]; 35 36 //.show_削除でフェードアウト 37 nowSlide.classList.remove('show_'); 38 // と同時に、次のスライドがズームしながらフェードインする 39 NextSlide.classList.add('show_', 'zoom_'); 40 //フェードアウト完了後、.zoom_削除 41 setTimeout(() => { 42 nowSlide.classList.remove('zoom_'); 43 }, FadeTime); 44 45 }; 46 }, IntarvalTime); 47 48}
何卒よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/25 01:22
2021/08/25 01:29 編集
2021/08/25 04:33
2021/08/25 04:58
2021/08/25 05:01
2021/08/25 05:07
2021/08/25 05:48