teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

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

2020/10/19 02:25

投稿

navbisuu
navbisuu

スコア2

title CHANGED
File without changes
body CHANGED
@@ -123,7 +123,7 @@
123
123
  htmlの記述はこうなります。htmlはこのまま複製しても使えるようにしたいです。
124
124
  ```html
125
125
  <!--1つのスライド-->
126
- <div class="product-slide">
126
+ <div class="slide-box">
127
127
  <!--メインスライド-->
128
128
  <ul class="slide-main">
129
129
  <li>1</li>

5

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

2020/10/19 02:25

投稿

navbisuu
navbisuu

スコア2

title CHANGED
File without changes
body CHANGED
@@ -8,7 +8,7 @@
8
8
  $(function() {
9
9
  var slider = {};
10
10
  var thumbnailItem = {};
11
- var classLength = $(".product-slide").length;
11
+ var classLength = $(".slide-box").length;
12
12
 
13
13
  for (var i = 0; classLength > i; i++) {
14
14
  newClassMain = "main" + i;
@@ -58,11 +58,11 @@
58
58
  どのサムネイルをクリックしても、一番下のスライドが反応してしまいます。
59
59
  ```javascript
60
60
  $(function() {
61
- // slide商品紹介(サムネイルつき)---------------------
61
+ // slide(サムネイルつき)---------------------
62
62
  // 参考サイト:https://takblog.site/web/?p=144
63
63
 
64
64
  //【追加】スライドの数を数え、その数だけ個別のクラスを付与する
65
- var classLength = $(".product-slide").length;
65
+ var classLength = $(".slide-box").length;
66
66
  var newClassMain, newClassThumbnail, slider, thumbnailItem;
67
67
  //【追加】サムネイル画像アイテムに data-index でindex番号を付与
68
68
  for (var i = 0; classLength > i; i++) {

4

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

2020/10/19 01:59

投稿

navbisuu
navbisuu

スコア2

title CHANGED
File without changes
body CHANGED
@@ -32,4 +32,124 @@
32
32
  こちらを参考にしております。
33
33
  [https://teratail.com/questions/68851](https://teratail.com/questions/68851)
34
34
  evalの使い方も今一つつかめていません。
35
- 説明が下手ですみません。ご教示よろしくお願い申し上げます。
35
+ 説明が下手ですみません。ご教示よろしくお願い申し上げます。
36
+
37
+ ### 【追記】やりたいこと
38
+ 別の質問ページ[https://teratail.com/questions/298665](https://teratail.com/questions/298665)の内容になるのですが、
39
+ slickスライドで
40
+ スライドとサムネイルのクラス名が同じだと、
41
+ 複数増やした状態で、サムネイルをクリックしたら、同時にスライドが動いてしまうことに気付きました。。。
42
+ なので、スライドとサムネイルのクラス名を変更する方法で実装を考え直しています。
43
+
44
+ そこで、javascriptの記述をスライダーの数だけ複製し、
45
+ スライダーとサムネイル画像の部分を、
46
+ 下記のように、変数と中に入れるクラス名を手動で変更したら、うまく起動しました。
47
+ ```javascript
48
+ var slider = ".main0"; //スライダー
49
+ var thumbnailItem = ".slide-thumbnail0 li"; //サムネイル画像
50
+ ```
51
+ ```javascript
52
+ var slider1 = ".main1"; //スライダー
53
+ var thumbnailItem1 = ".slide-thumbnail1 li"; //サムネイル画像
54
+ ```
55
+ これをfor文を使って動的に変数とクラスの番号を変更したいのですが、うまくいきません。。。
56
+ 下記のように、クラスの番号を動的に変更するようにしたのですが、
57
+ スライドが複数ある場合、
58
+ どのサムネイルをクリックしても、一番下のスライドが反応してしまいます。
59
+ ```javascript
60
+ $(function() {
61
+ // slide商品紹介(サムネイルつき)---------------------
62
+ // 参考サイト:https://takblog.site/web/?p=144
63
+
64
+ //【追加】スライドの数を数え、その数だけ個別のクラスを付与する
65
+ var classLength = $(".product-slide").length;
66
+ var newClassMain, newClassThumbnail, slider, thumbnailItem;
67
+ //【追加】サムネイル画像アイテムに data-index でindex番号を付与
68
+ for (var i = 0; classLength > i; i++) {
69
+ newClassMain = "main" + i;
70
+ newClassThumbnail = "thumbnail" + i;
71
+ slider = "." + newClassMain;
72
+ thumbnailItem = "." + newClassThumbnail + " " + "li";
73
+ $(".slide-main")
74
+ .eq(i)
75
+ .addClass(newClassMain);
76
+ $(".slide-thumbnail")
77
+ .eq(i)
78
+ .addClass(newClassThumbnail);
79
+ //サムネイル画像アイテムに data-index でindex番号を付与
80
+ $(thumbnailItem).each(function() {
81
+ var index = $(thumbnailItem).index(this);
82
+ $(this).attr("data-index", index);
83
+ });
84
+ //スライダー初期化後、カレントのサムネイル画像にクラス「thumbnail-current」を付ける
85
+ //「slickスライダー作成」の前にこの記述は書いてください。
86
+ $(slider).on("init", function(slick) {
87
+ var index = $(".slide-item.slick-slide.slick-current").attr(
88
+ "data-slick-index"
89
+ );
90
+ $(thumbnailItem + '[data-index="' + index + '"]').addClass(
91
+ "thumbnail-current"
92
+ );
93
+ });
94
+ //slickスライダー初期化
95
+ $(slider).slick({
96
+ arrows: true,
97
+ dots: true,
98
+ fade: true,
99
+ infinite: false //これは必須
100
+ });
101
+ //サムネイル画像アイテムをクリックした時にスライダー切り替え
102
+ $(thumbnailItem).on("click", function() {
103
+ var index = $(this).attr("data-index");
104
+ $(slider).slick("slickGoTo", index, false);
105
+ });
106
+ //サムネイル画像のカレントを切り替え
107
+ $(slider).on("beforeChange", function(
108
+ event,
109
+ slick,
110
+ currentSlide,
111
+ nextSlide
112
+ ) {
113
+ $(thumbnailItem).each(function() {
114
+ $(this).removeClass("thumbnail-current");
115
+ });
116
+ $(thumbnailItem + '[data-index="' + nextSlide + '"]').addClass(
117
+ "thumbnail-current"
118
+ );
119
+ });
120
+ }
121
+ }
122
+ ```
123
+ htmlの記述はこうなります。htmlはこのまま複製しても使えるようにしたいです。
124
+ ```html
125
+ <!--1つのスライド-->
126
+ <div class="product-slide">
127
+ <!--メインスライド-->
128
+ <ul class="slide-main">
129
+ <li>1</li>
130
+ <li>2</li>
131
+ <li>3</li>
132
+ <li>4</li>
133
+ <li>5</li>
134
+ </ul>
135
+ <!--/メインスライド-->
136
+ <!--サムネイルスライド-->
137
+ <ul class="slide-thumbnail">
138
+ <li>1</li>
139
+ <li>2</li>
140
+ <li>3</li>
141
+ <li>4</li>
142
+ <li>5</li>
143
+ </ul>
144
+ <!--/サムネイルスライド-->
145
+ </div>
146
+ <!--/1つのスライド-->
147
+ ```
148
+
149
+
150
+ 以上を試してみて、変数名も変更する必要があると考えています。
151
+ しかし、slider[i],thumbnailItem[i] ではうまくいきませんでした。。
152
+
153
+ 長文で申し訳ありません。
154
+ どうかお力をお借りできれば嬉しいです。
155
+ よろしくお願い申し上げます。

3

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

2020/10/18 10:48

投稿

navbisuu
navbisuu

スコア2

title CHANGED
File without changes
body CHANGED
@@ -11,6 +11,11 @@
11
11
  var classLength = $(".product-slide").length;
12
12
 
13
13
  for (var i = 0; classLength > i; i++) {
14
+ newClassMain = "main" + i;
15
+ newClassThumbnail = "thumbnail" + i;
16
+ slider[i] = "." + newClassMain;
17
+ thumbnailItem[i] = "." + newClassThumbnail + " " + "li";
18
+
14
19
  $(slider[i]).on("init", function(slick) {
15
20
  var index = $(".slide-item.slick-slide.slick-current").attr(
16
21
  "data-slick-index"
@@ -18,8 +23,10 @@
18
23
  $(thumbnailItem[i] + '[data-index="' + index + '"]').addClass(
19
24
  "thumbnail-current"
20
25
  );
26
+
21
- });
27
+ console.log(slider[i]); //.main0 .main1 とclassLengthの数だけ返します。
22
28
  }
29
+ console.log(slider[i]); //forの外なのでundefineがでます。
23
30
  }
24
31
  ```
25
32
  こちらを参考にしております。

2

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

2020/10/18 10:23

投稿

navbisuu
navbisuu

スコア2

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

1

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

2020/10/18 10:14

投稿

navbisuu
navbisuu

スコア2

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