質問編集履歴

6

文章を少々修正しました。

2020/10/19 02:25

投稿

navbisuu
navbisuu

スコア2

test CHANGED
File without changes
test CHANGED
@@ -248,7 +248,7 @@
248
248
 
249
249
  <!--1つのスライド-->
250
250
 
251
- <div class="product-slide">
251
+ <div class="slide-box">
252
252
 
253
253
  <!--メインスライド-->
254
254
 

5

クラス名を修正しました。

2020/10/19 02:25

投稿

navbisuu
navbisuu

スコア2

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  var thumbnailItem = {};
20
20
 
21
- var classLength = $(".product-slide").length;
21
+ var classLength = $(".slide-box").length;
22
22
 
23
23
 
24
24
 
@@ -118,7 +118,7 @@
118
118
 
119
119
  $(function() {
120
120
 
121
- // slide商品紹介(サムネイルつき)---------------------
121
+ // slide(サムネイルつき)---------------------
122
122
 
123
123
  // 参考サイト:https://takblog.site/web/?p=144
124
124
 
@@ -126,7 +126,7 @@
126
126
 
127
127
  //【追加】スライドの数を数え、その数だけ個別のクラスを付与する
128
128
 
129
- var classLength = $(".product-slide").length;
129
+ var classLength = $(".slide-box").length;
130
130
 
131
131
  var newClassMain, newClassThumbnail, slider, thumbnailItem;
132
132
 

4

やりたいことの詳細を追記しました。

2020/10/19 01:59

投稿

navbisuu
navbisuu

スコア2

test CHANGED
File without changes
test CHANGED
@@ -67,3 +67,243 @@
67
67
  evalの使い方も今一つつかめていません。
68
68
 
69
69
  説明が下手ですみません。ご教示よろしくお願い申し上げます。
70
+
71
+
72
+
73
+ ### 【追記】やりたいこと
74
+
75
+ 別の質問ページ[https://teratail.com/questions/298665](https://teratail.com/questions/298665)の内容になるのですが、
76
+
77
+ slickスライドで
78
+
79
+ スライドとサムネイルのクラス名が同じだと、
80
+
81
+ 複数増やした状態で、サムネイルをクリックしたら、同時にスライドが動いてしまうことに気付きました。。。
82
+
83
+ なので、スライドとサムネイルのクラス名を変更する方法で実装を考え直しています。
84
+
85
+
86
+
87
+ そこで、javascriptの記述をスライダーの数だけ複製し、
88
+
89
+ スライダーとサムネイル画像の部分を、
90
+
91
+ 下記のように、変数と中に入れるクラス名を手動で変更したら、うまく起動しました。
92
+
93
+ ```javascript
94
+
95
+ var slider = ".main0"; //スライダー
96
+
97
+ var thumbnailItem = ".slide-thumbnail0 li"; //サムネイル画像
98
+
99
+ ```
100
+
101
+ ```javascript
102
+
103
+ var slider1 = ".main1"; //スライダー
104
+
105
+ var thumbnailItem1 = ".slide-thumbnail1 li"; //サムネイル画像
106
+
107
+ ```
108
+
109
+ これをfor文を使って動的に変数とクラスの番号を変更したいのですが、うまくいきません。。。
110
+
111
+ 下記のように、クラスの番号を動的に変更するようにしたのですが、
112
+
113
+ スライドが複数ある場合、
114
+
115
+ どのサムネイルをクリックしても、一番下のスライドが反応してしまいます。
116
+
117
+ ```javascript
118
+
119
+ $(function() {
120
+
121
+ // slide商品紹介(サムネイルつき)---------------------
122
+
123
+ // 参考サイト:https://takblog.site/web/?p=144
124
+
125
+
126
+
127
+ //【追加】スライドの数を数え、その数だけ個別のクラスを付与する
128
+
129
+ var classLength = $(".product-slide").length;
130
+
131
+ var newClassMain, newClassThumbnail, slider, thumbnailItem;
132
+
133
+ //【追加】サムネイル画像アイテムに data-index でindex番号を付与
134
+
135
+ for (var i = 0; classLength > i; i++) {
136
+
137
+ newClassMain = "main" + i;
138
+
139
+ newClassThumbnail = "thumbnail" + i;
140
+
141
+ slider = "." + newClassMain;
142
+
143
+ thumbnailItem = "." + newClassThumbnail + " " + "li";
144
+
145
+ $(".slide-main")
146
+
147
+ .eq(i)
148
+
149
+ .addClass(newClassMain);
150
+
151
+ $(".slide-thumbnail")
152
+
153
+ .eq(i)
154
+
155
+ .addClass(newClassThumbnail);
156
+
157
+ //サムネイル画像アイテムに data-index でindex番号を付与
158
+
159
+ $(thumbnailItem).each(function() {
160
+
161
+ var index = $(thumbnailItem).index(this);
162
+
163
+ $(this).attr("data-index", index);
164
+
165
+ });
166
+
167
+ //スライダー初期化後、カレントのサムネイル画像にクラス「thumbnail-current」を付ける
168
+
169
+ //「slickスライダー作成」の前にこの記述は書いてください。
170
+
171
+ $(slider).on("init", function(slick) {
172
+
173
+ var index = $(".slide-item.slick-slide.slick-current").attr(
174
+
175
+ "data-slick-index"
176
+
177
+ );
178
+
179
+ $(thumbnailItem + '[data-index="' + index + '"]').addClass(
180
+
181
+ "thumbnail-current"
182
+
183
+ );
184
+
185
+ });
186
+
187
+ //slickスライダー初期化
188
+
189
+ $(slider).slick({
190
+
191
+ arrows: true,
192
+
193
+ dots: true,
194
+
195
+ fade: true,
196
+
197
+ infinite: false //これは必須
198
+
199
+ });
200
+
201
+ //サムネイル画像アイテムをクリックした時にスライダー切り替え
202
+
203
+ $(thumbnailItem).on("click", function() {
204
+
205
+ var index = $(this).attr("data-index");
206
+
207
+ $(slider).slick("slickGoTo", index, false);
208
+
209
+ });
210
+
211
+ //サムネイル画像のカレントを切り替え
212
+
213
+ $(slider).on("beforeChange", function(
214
+
215
+ event,
216
+
217
+ slick,
218
+
219
+ currentSlide,
220
+
221
+ nextSlide
222
+
223
+ ) {
224
+
225
+ $(thumbnailItem).each(function() {
226
+
227
+ $(this).removeClass("thumbnail-current");
228
+
229
+ });
230
+
231
+ $(thumbnailItem + '[data-index="' + nextSlide + '"]').addClass(
232
+
233
+ "thumbnail-current"
234
+
235
+ );
236
+
237
+ });
238
+
239
+ }
240
+
241
+ }
242
+
243
+ ```
244
+
245
+ htmlの記述はこうなります。htmlはこのまま複製しても使えるようにしたいです。
246
+
247
+ ```html
248
+
249
+ <!--1つのスライド-->
250
+
251
+ <div class="product-slide">
252
+
253
+ <!--メインスライド-->
254
+
255
+ <ul class="slide-main">
256
+
257
+ <li>1</li>
258
+
259
+ <li>2</li>
260
+
261
+ <li>3</li>
262
+
263
+ <li>4</li>
264
+
265
+ <li>5</li>
266
+
267
+ </ul>
268
+
269
+ <!--/メインスライド-->
270
+
271
+ <!--サムネイルスライド-->
272
+
273
+ <ul class="slide-thumbnail">
274
+
275
+ <li>1</li>
276
+
277
+ <li>2</li>
278
+
279
+ <li>3</li>
280
+
281
+ <li>4</li>
282
+
283
+ <li>5</li>
284
+
285
+ </ul>
286
+
287
+ <!--/サムネイルスライド-->
288
+
289
+ </div>
290
+
291
+ <!--/1つのスライド-->
292
+
293
+ ```
294
+
295
+
296
+
297
+
298
+
299
+ 以上を試してみて、変数名も変更する必要があると考えています。
300
+
301
+ しかし、slider[i],thumbnailItem[i] ではうまくいきませんでした。。
302
+
303
+
304
+
305
+ 長文で申し訳ありません。
306
+
307
+ どうかお力をお借りできれば嬉しいです。
308
+
309
+ よろしくお願い申し上げます。

3

肝心の変数の中身を追記しました。そして、console.logの結果も追記しています。

2020/10/18 10:48

投稿

navbisuu
navbisuu

スコア2

test CHANGED
File without changes
test CHANGED
@@ -24,6 +24,16 @@
24
24
 
25
25
  for (var i = 0; classLength > i; i++) {
26
26
 
27
+ newClassMain = "main" + i;
28
+
29
+ newClassThumbnail = "thumbnail" + i;
30
+
31
+ slider[i] = "." + newClassMain;
32
+
33
+ thumbnailItem[i] = "." + newClassThumbnail + " " + "li";
34
+
35
+
36
+
27
37
  $(slider[i]).on("init", function(slick) {
28
38
 
29
39
  var index = $(".slide-item.slick-slide.slick-current").attr(
@@ -38,9 +48,13 @@
38
48
 
39
49
  );
40
50
 
51
+
52
+
41
- });
53
+ console.log(slider[i]); //.main0 .main1 とclassLengthの数だけ返します。
42
54
 
43
55
  }
56
+
57
+ console.log(slider[i]); //forの外なのでundefineがでます。
44
58
 
45
59
  }
46
60
 

2

関数→変数に変更しました。

2020/10/18 10:23

投稿

navbisuu
navbisuu

スコア2

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  この場合、javascriptがうまく作動しません。
6
6
 
7
- slider0,slider1のように別の数として扱われるようにしたいです。
7
+ slider0,slider1のように別の数として扱われるようにしたいです。
8
8
 
9
9
  下のjavascriptの記述は省略して書いていますので、参考程度にしてください。
10
10
 

1

エラーの詳細と、やりたいことの詳細内容を追記しました。

2020/10/18 10:14

投稿

navbisuu
navbisuu

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,14 @@
1
1
  for文を使用する時、変数の名前を動的に変更したいです。
2
2
 
3
- 下記のように、sliderをslider[i]と書いてみましたが、うまくいきませんでした。。。
3
+ 下記のように、sliderをslider[i]と書いてみましたが、
4
+
5
+ この場合、javascriptがうまく作動しません。
6
+
7
+ slider0,slider1のように別の関数として扱われるようにしたいです。
8
+
9
+ 下のjavascriptの記述は省略して書いていますので、参考程度にしてください。
10
+
11
+ (console.log(slider[i]);で確認したところ、中身は入っているようです。)
4
12
 
5
13
  ```javascript
6
14