for文を使用する時、変数の名前を動的に変更したいです。
下記のように、sliderをslider[i]と書いてみましたが、
この場合、javascriptがうまく作動しません。
slider0,slider1のように別の変数として扱われるようにしたいです。
下のjavascriptの記述は省略して書いていますので、参考程度にしてください。
(console.log(slider[i]);で確認したところ、中身は入っているようです。)
javascript
1$(function() { 2 var slider = {}; 3 var thumbnailItem = {}; 4 var classLength = $(".slide-box").length; 5 6 for (var i = 0; classLength > i; i++) { 7 newClassMain = "main" + i; 8 newClassThumbnail = "thumbnail" + i; 9 slider[i] = "." + newClassMain; 10 thumbnailItem[i] = "." + newClassThumbnail + " " + "li"; 11 12 $(slider[i]).on("init", function(slick) { 13 var index = $(".slide-item.slick-slide.slick-current").attr( 14 "data-slick-index" 15 ); 16 $(thumbnailItem[i] + '[data-index="' + index + '"]').addClass( 17 "thumbnail-current" 18 ); 19 20 console.log(slider[i]); //.main0 .main1 とclassLengthの数だけ返します。 21 } 22 console.log(slider[i]); //forの外なのでundefineがでます。 23}
こちらを参考にしております。
https://teratail.com/questions/68851
evalの使い方も今一つつかめていません。
説明が下手ですみません。ご教示よろしくお願い申し上げます。
【追記】やりたいこと
別の質問ページhttps://teratail.com/questions/298665の内容になるのですが、
slickスライドで
スライドとサムネイルのクラス名が同じだと、
複数増やした状態で、サムネイルをクリックしたら、同時にスライドが動いてしまうことに気付きました。。。
なので、スライドとサムネイルのクラス名を変更する方法で実装を考え直しています。
そこで、javascriptの記述をスライダーの数だけ複製し、
スライダーとサムネイル画像の部分を、
下記のように、変数と中に入れるクラス名を手動で変更したら、うまく起動しました。
javascript
1 var slider = ".main0"; //スライダー 2 var thumbnailItem = ".slide-thumbnail0 li"; //サムネイル画像
javascript
1 var slider1 = ".main1"; //スライダー 2 var thumbnailItem1 = ".slide-thumbnail1 li"; //サムネイル画像
これをfor文を使って動的に変数とクラスの番号を変更したいのですが、うまくいきません。。。
下記のように、クラスの番号を動的に変更するようにしたのですが、
スライドが複数ある場合、
どのサムネイルをクリックしても、一番下のスライドが反応してしまいます。
javascript
1 $(function() { 2 // slide(サムネイルつき)--------------------- 3 // 参考サイト:https://takblog.site/web/?p=144 4 5 //【追加】スライドの数を数え、その数だけ個別のクラスを付与する 6 var classLength = $(".slide-box").length; 7 var newClassMain, newClassThumbnail, slider, thumbnailItem; 8 //【追加】サムネイル画像アイテムに data-index でindex番号を付与 9 for (var i = 0; classLength > i; i++) { 10 newClassMain = "main" + i; 11 newClassThumbnail = "thumbnail" + i; 12 slider = "." + newClassMain; 13 thumbnailItem = "." + newClassThumbnail + " " + "li"; 14 $(".slide-main") 15 .eq(i) 16 .addClass(newClassMain); 17 $(".slide-thumbnail") 18 .eq(i) 19 .addClass(newClassThumbnail); 20 //サムネイル画像アイテムに data-index でindex番号を付与 21 $(thumbnailItem).each(function() { 22 var index = $(thumbnailItem).index(this); 23 $(this).attr("data-index", index); 24 }); 25 //スライダー初期化後、カレントのサムネイル画像にクラス「thumbnail-current」を付ける 26 //「slickスライダー作成」の前にこの記述は書いてください。 27 $(slider).on("init", function(slick) { 28 var index = $(".slide-item.slick-slide.slick-current").attr( 29 "data-slick-index" 30 ); 31 $(thumbnailItem + '[data-index="' + index + '"]').addClass( 32 "thumbnail-current" 33 ); 34 }); 35 //slickスライダー初期化 36 $(slider).slick({ 37 arrows: true, 38 dots: true, 39 fade: true, 40 infinite: false //これは必須 41 }); 42 //サムネイル画像アイテムをクリックした時にスライダー切り替え 43 $(thumbnailItem).on("click", function() { 44 var index = $(this).attr("data-index"); 45 $(slider).slick("slickGoTo", index, false); 46 }); 47 //サムネイル画像のカレントを切り替え 48 $(slider).on("beforeChange", function( 49 event, 50 slick, 51 currentSlide, 52 nextSlide 53 ) { 54 $(thumbnailItem).each(function() { 55 $(this).removeClass("thumbnail-current"); 56 }); 57 $(thumbnailItem + '[data-index="' + nextSlide + '"]').addClass( 58 "thumbnail-current" 59 ); 60 }); 61 } 62 }
htmlの記述はこうなります。htmlはこのまま複製しても使えるようにしたいです。
html
1<!--1つのスライド--> 2<div class="slide-box"> 3 <!--メインスライド--> 4 <ul class="slide-main"> 5 <li>1</li> 6 <li>2</li> 7 <li>3</li> 8 <li>4</li> 9 <li>5</li> 10 </ul> 11 <!--/メインスライド--> 12 <!--サムネイルスライド--> 13 <ul class="slide-thumbnail"> 14 <li>1</li> 15 <li>2</li> 16 <li>3</li> 17 <li>4</li> 18 <li>5</li> 19 </ul> 20 <!--/サムネイルスライド--> 21</div> 22<!--/1つのスライド-->
以上を試してみて、変数名も変更する必要があると考えています。
しかし、slider[i],thumbnailItem[i] ではうまくいきませんでした。。
長文で申し訳ありません。
どうかお力をお借りできれば嬉しいです。
よろしくお願い申し上げます。
回答2件
あなたの回答
tips
プレビュー