質問内容
JavaScriptで、1つのタグにクラス名がオン・オフする方法として
今回試した方法より、よい方法がないか
追記
今回質問した「よい方法」というのは、「よりシンプルな方法」がないかというところです。
#hoge2を追加したりdelayをかけるなど、クラス名を付けはずしするだけなのに
余分な動作を追加してしまっていると感じています。その点に関して
何か他にシンプルな方法はないのかと思って質問しました。
前提
スライドショーのインジケーターを作成。
クラス名の付け外しで動くようにCSSを作成。
JavaScriptで、1つのタグにクラス名がオン・オフするように作成。
単純にオン・オフしてもうまくいかず、いくつかパターンを作成。
該当のソースコード
html
1 2 <div id="slide_box"> 3 <div class="img_01 test" data-box="1"> 4 <img src="01.jpg" alt=""> 5 </div> 6 <div class="img_02" data-box="2"> 7 <img src="02.jpg" alt=""> 8 </div> 9 <div class="img_03" data-box="3"> 10 <img src="03.jpg" alt=""> 11 </div> 12 </div> 13 14 <div class="bar_div"> 15 <div id="hoge" class="bp"></div> 16 <!-- <div id="hoge2" class=""></div> --> 17 </div> 18 19<style> 20.bar_div { 21 margin: auto; 22 width:200px; 23 aspect-ratio: 10 / 1; 24 background-color:#ececec; 25 position:relative; 26 border-radius:10px; 27 overflow: hidden; 28} 29.bp { 30 position:absolute; 31 height:100%; 32 background-color:#FFCA28; 33 animation: prog 2s normal; 34 35} 36@keyframes prog { 37 0% { 38 width: 0 39 } 40 100% { 41 width: 100% 42 } 43} 44</style> 45
javascript
1 2 let auto_anime = function() { 3 auto_set = setInterval(() => { 4 if ( v < slide_max_count ) { 5 $(".img_0" + v ).removeClass("test"); 6 $(".img_0" + ( v + 1 )).addClass("test"); 7 // $('#hoge').removeClass('bp'); パターン1うまく動かず 8 // $('#hoge').addClass('bp'); 9 // $('#hoge').removeClass('bp'); パターン2 if分岐は省略 10 // $('#hoge2').addClass('bp'); 11 $('#hoge').removeClass('bp').delay(100).queue(function(){ 12 $(this).addClass('bp').dequeue(); 13 }); //パターン3 14 v++; 15 }else { 16 $(".img_01").addClass("test"); 17 $(".img_0" + slide_max_count ).removeClass("test"); 18 $('#hoge').removeClass('bp').delay(100).queue(function(){ 19 $(this).addClass('bp').dequeue(); 20 }); 21 v = 1; 22 } 23 }, 2000); 24 }; 25
試したこと
パターン1
シンプルに#hogeにクラス名を付け外しを行うも、CSSのアニメーションが動かず
パターン2
#hogeと#hoge2を作って、クラス名を交互に付ける → 動く
パターン3
#hogeにクラス名を付ける時にdelayをかけてクラス名を付ける → 動く
回答3件
あなたの回答
tips
プレビュー