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

質問編集履歴

6

追記内のslide.jsの記述に変更を加えました。

2021/06/03 05:21

投稿

punchan36
punchan36

スコア105

title CHANGED
File without changes
body CHANGED
@@ -251,9 +251,9 @@
251
251
  var currentSlide = dir.find('.active'); // 表示されているスライドをcurrentSlideと名付ける。
252
252
  $('.change-btn').show(); // 「前へ」と「次へ」は常に表示する。
253
253
  if (currentSlide.hasClass('firstSlide')) {
254
- $('.prev-btn').hide(); // 表示されているスライドが最初のページの場合「前へ」は非表示。
254
+ dir.find('.prev-btn').hide(); // 表示されているスライドが最初のページの場合「前へ」は非表示。
255
255
  } else if (currentSlide.hasClass('lastSlide')) {
256
- $('.next-btn').hide(); // 表示されているスライドが最後のページの場合「次へ」は非表示。
256
+ dir.find('.next-btn').hide(); // 表示されているスライドが最後のページの場合「次へ」は非表示。
257
257
  }
258
258
  }
259
259
 

5

ご助言を元にしたコードを追記内に記載致しました。

2021/06/03 05:21

投稿

punchan36
punchan36

スコア105

title CHANGED
File without changes
body CHANGED
@@ -181,14 +181,8 @@
181
181
  ### 追記
182
182
 
183
183
  ご回答を元にしたコードを追記致します。
184
- こちらのコードでも、質問前と同様に上手く動きませんでした。状況は以下の通りです。
185
- 0. 「スライド1、2」に関わらず、最初にクリックしたスライドは全ての機能が上手く動く。
186
- 0. スライドを一旦閉じもう片方のスライドをクリックすると、中身(あ, い, う, か, き, くの文字)が無い空白のページが表示される。
187
- 0. 更には1ページ目から必ず表示される訳では先ほどのスライドを何ページ目閉じたかに依存して途中のページから表示されたり
184
+ ページの中身は独立して(他のスライドに依存する事なく)表示されるようにったものの「←前へ 次へ→」ボタンみまだ他のスライドでの動作と連動して表示されてしまいます。
188
- 0. 「← 前へ」や「次へ →」ボタンを押しても相変わらずページの中身が表示されないままページ遷移だけするが、一度「ページボタン」を押せばその番号に対応したページ内容が表示され、その後であれば「← 前へ」や「次へ →」ボタンも機能するようになる。
189
185
 
190
- テストまでして頂き有難うございます。どこかコードに相違点がありますでしょうか。
191
-
192
186
  **slide.html.erb**
193
187
  ```rails
194
188
  <ul>
@@ -253,8 +247,9 @@
253
247
  $(document).on('turbolinks:load', function() {
254
248
  $(function() {
255
249
  function toggleChangeBtn(dir){
250
+ var dir = $(this).parents('.slide-wrapper'); //対象のクラスを絞りたいが、絞れていない?
256
- var currentSlide = $('.active');
251
+ var currentSlide = dir.find('.active'); // 表示されているスライドをcurrentSlideと名付ける。
257
- $('.change-btn').show();
252
+ $('.change-btn').show(); // 「前へ」と「次へ」は常に表示する。
258
253
  if (currentSlide.hasClass('firstSlide')) {
259
254
  $('.prev-btn').hide(); // 表示されているスライドが最初のページの場合「前へ」は非表示。
260
255
  } else if (currentSlide.hasClass('lastSlide')) {
@@ -262,26 +257,24 @@
262
257
  }
263
258
  }
264
259
 
265
- $('.index-btn').click(function() { // ページ番号をクリックした際の動き。
260
+ $('.index-btn').click(function() {
261
+ var dir = $(this).parents('.slide-wrapper'); //対象のクラスを絞る。
266
- $('.active').removeClass('active'); // .activeクラスが付いていたスライドから.activeを取り除く。
262
+ dir.find('.active').removeClass('active'); // 表示されていたスライドから.activeを取り除く。
267
263
  var clickedIndex = $('.index-btn').index($(this));
268
- $('.slide').eq(clickedIndex).addClass('active'); // クリックされたページ番号と同じインデックス番号を持つスライドに.activeを付与する。
264
+ $('.slide').eq(clickedIndex).addClass('active'); // クリックされたページ番号と同じインデックス番号を持つスライドに.activeを付与する。
269
-
270
- var dir = $(this).parents('.slide-wrapper');
271
265
  toggleChangeBtn(dir);
272
266
  });
273
267
 
274
- $('.change-btn').click(function() { // 前へ、次へのボタンをクリックした際の動き。
268
+ $('.change-btn').click(function() {
269
+ var dir = $(this).parents('.slide-wrapper'); //対象のクラスを絞る。
275
- var $displaySlide = $('.active');
270
+ var $displaySlide = dir.find('.active'); // 表示されているスライドをdisplaySlideと名付ける。
276
271
  $displaySlide.removeClass('active'); // .activeが付いていたスライドから.activeを取り除く。
277
272
  if ($(this).hasClass('next-btn')) {
278
- $displaySlide.next().addClass('active'); // 今クリックしたボタンに.next-btnクラスがついていたら、その次のスライドにactiveを付与する。
273
+ $displaySlide.next().addClass('active'); // .next-btnクラスがついていたら、その次のスライドにactiveを付与する。
279
274
  }
280
275
  else {
281
- $displaySlide.prev().addClass('active'); // 今クリックしたボタンに.prev-btnクラスがついていたら、その前のスライドにactiveを付与する。
276
+ $displaySlide.prev().addClass('active'); // .prev-btnクラスがついていたら、その前のスライドにactiveを付与する。
282
277
  }
283
-
284
- var dir = $(this).parents('.slide-wrapper');
285
278
  toggleChangeBtn(dir);
286
279
  });
287
280
  })

4

追記内にて、引数の処理に関する記載を編集致しました。

2021/06/03 03:33

投稿

punchan36
punchan36

スコア105

title CHANGED
File without changes
body CHANGED
@@ -252,7 +252,7 @@
252
252
  ```js
253
253
  $(document).on('turbolinks:load', function() {
254
254
  $(function() {
255
- function toggleChangeBtn(){
255
+ function toggleChangeBtn(dir){
256
256
  var currentSlide = $('.active');
257
257
  $('.change-btn').show();
258
258
  if (currentSlide.hasClass('firstSlide')) {
@@ -262,7 +262,7 @@
262
262
  }
263
263
  }
264
264
 
265
- $('.index-btn').click(function(dir) { // ページ番号をクリックした際の動き。
265
+ $('.index-btn').click(function() { // ページ番号をクリックした際の動き。
266
266
  $('.active').removeClass('active'); // .activeクラスが付いていたスライドから.activeを取り除く。
267
267
  var clickedIndex = $('.index-btn').index($(this));
268
268
  $('.slide').eq(clickedIndex).addClass('active'); // 今クリックされたページ番号と同じインデックス番号を持つスライドに.activeを付与する。
@@ -271,7 +271,7 @@
271
271
  toggleChangeBtn(dir);
272
272
  });
273
273
 
274
- $('.change-btn').click(function(dir) { // 前へ、次へのボタンをクリックした際の動き。
274
+ $('.change-btn').click(function() { // 前へ、次へのボタンをクリックした際の動き。
275
275
  var $displaySlide = $('.active');
276
276
  $displaySlide.removeClass('active'); // .activeが付いていたスライドから.activeを取り除く。
277
277
  if ($(this).hasClass('next-btn')) {

3

「追記」内のslide.jsにあります引数部分を編集致しました。

2021/06/03 01:52

投稿

punchan36
punchan36

スコア105

title CHANGED
File without changes
body CHANGED
@@ -262,7 +262,7 @@
262
262
  }
263
263
  }
264
264
 
265
- $('.index-btn').click(function() { // ページ番号をクリックした際の動き。
265
+ $('.index-btn').click(function(dir) { // ページ番号をクリックした際の動き。
266
266
  $('.active').removeClass('active'); // .activeクラスが付いていたスライドから.activeを取り除く。
267
267
  var clickedIndex = $('.index-btn').index($(this));
268
268
  $('.slide').eq(clickedIndex).addClass('active'); // 今クリックされたページ番号と同じインデックス番号を持つスライドに.activeを付与する。
@@ -271,7 +271,7 @@
271
271
  toggleChangeBtn(dir);
272
272
  });
273
273
 
274
- $('.change-btn').click(function() { // 前へ、次へのボタンをクリックした際の動き。
274
+ $('.change-btn').click(function(dir) { // 前へ、次へのボタンをクリックした際の動き。
275
275
  var $displaySlide = $('.active');
276
276
  $displaySlide.removeClass('active'); // .activeが付いていたスライドから.activeを取り除く。
277
277
  if ($(this).hasClass('next-btn')) {

2

「追記」から下を追加致しました。

2021/06/02 09:43

投稿

punchan36
punchan36

スコア105

title CHANGED
File without changes
body CHANGED
@@ -176,4 +176,114 @@
176
176
  ruby 2.6.4p104
177
177
  RubyGems 3.0.3
178
178
  Rails 5.2.3
179
- jquery 1.12.4
179
+ jquery 1.12.4
180
+
181
+ ### 追記
182
+
183
+ ご回答を元にしたコードを追記致します。
184
+ こちらのコードでも、質問前と同様に上手く動きませんでした。状況は以下の通りです。
185
+ 0. 「スライド1、2」に関わらず、最初にクリックしたスライドは全ての機能が上手く動く。
186
+ 0. スライドを一旦閉じもう片方のスライドをクリックすると、中身(あ, い, う, か, き, くの文字)が無い空白のページが表示される。
187
+ 0. 更には1ページ目から必ず表示される訳ではなく、先ほどのスライドを何ページ目で閉じたかに依存して途中のページから表示されたりする。
188
+ 0. 「← 前へ」や「次へ →」ボタンを押しても相変わらずページの中身が表示されないままページ遷移だけするが、一度「ページボタン」を押せばその番号に対応したページ内容が表示され、その後であれば「← 前へ」や「次へ →」ボタンも機能するようになる。
189
+
190
+ テストまでして頂き有難うございます。どこかコードに相違点がありますでしょうか。
191
+
192
+ **slide.html.erb**
193
+ ```rails
194
+ <ul>
195
+ <li><div data-target="slide01" class="click-modal">スライド1</div>
196
+ <div id="slide01" class="modal-wrapper">
197
+ <div class="modal">
198
+ <div class="close-modal">
199
+ <i class="fa fa-2x fa-times"></i>
200
+ </div>
201
+ <div class="slide-wrapper">
202
+ <div class="slide-title">スライド1</div>
203
+ <div class="change-btn-wrapper">
204
+ <div class="change-btn prev-btn">← 前へ</div>
205
+ <div class="change-btn next-btn">次へ →</div>
206
+ </div>
207
+ <ul class="slides">
208
+ <li class="slide firstSlide active">あ</li>
209
+ <li class="slide">い</li>
210
+ <li class="slide lastSlide">う</li>
211
+ </ul>
212
+ <div class="index-btn-wrapper">
213
+ <div class="index-btn">1</div>
214
+ <div class="index-btn">2</div>
215
+ <div class="index-btn">3</div>
216
+ </div>
217
+ </div>
218
+ </div>
219
+ </div>
220
+ </li>
221
+
222
+ <li><div data-target="slide02" class="click-modal">スライド2</div>
223
+ <div id="slide02" class="modal-wrapper">
224
+ <div class="modal">
225
+ <div class="close-modal">
226
+ <i class="fa fa-2x fa-times"></i>
227
+ </div>
228
+ <div class="slide-wrapper">
229
+ <div class="slide-title">スライド2</div>
230
+ <div class="change-btn-wrapper">
231
+ <div class="change-btn prev-btn">← 前へ</div>
232
+ <div class="change-btn next-btn">次へ →</div>
233
+ </div>
234
+ <ul class="slides">
235
+ <li class="slide firstSlide active">か</li>
236
+ <li class="slide">き</li>
237
+ <li class="slide lastSlide">く</li>
238
+ </ul>
239
+ <div class="index-btn-wrapper">
240
+ <div class="index-btn">1</div>
241
+ <div class="index-btn">2</div>
242
+ <div class="index-btn">3</div>
243
+ </div>
244
+ </div>
245
+ </div>
246
+ </div>
247
+ </li>
248
+ </ul>
249
+ ```
250
+
251
+ **slide.js**
252
+ ```js
253
+ $(document).on('turbolinks:load', function() {
254
+ $(function() {
255
+ function toggleChangeBtn(){
256
+ var currentSlide = $('.active');
257
+ $('.change-btn').show();
258
+ if (currentSlide.hasClass('firstSlide')) {
259
+ $('.prev-btn').hide(); // 表示されているスライドが最初のページの場合「前へ」は非表示。
260
+ } else if (currentSlide.hasClass('lastSlide')) {
261
+ $('.next-btn').hide(); // 表示されているスライドが最後のページの場合「次へ」は非表示。
262
+ }
263
+ }
264
+
265
+ $('.index-btn').click(function() { // ページ番号をクリックした際の動き。
266
+ $('.active').removeClass('active'); // .activeクラスが付いていたスライドから.activeを取り除く。
267
+ var clickedIndex = $('.index-btn').index($(this));
268
+ $('.slide').eq(clickedIndex).addClass('active'); // 今クリックされたページ番号と同じインデックス番号を持つスライドに.activeを付与する。
269
+
270
+ var dir = $(this).parents('.slide-wrapper');
271
+ toggleChangeBtn(dir);
272
+ });
273
+
274
+ $('.change-btn').click(function() { // 前へ、次へのボタンをクリックした際の動き。
275
+ var $displaySlide = $('.active');
276
+ $displaySlide.removeClass('active'); // .activeが付いていたスライドから.activeを取り除く。
277
+ if ($(this).hasClass('next-btn')) {
278
+ $displaySlide.next().addClass('active'); // 今クリックしたボタンに.next-btnクラスがついていたら、その次のスライドにactiveを付与する。
279
+ }
280
+ else {
281
+ $displaySlide.prev().addClass('active'); // 今クリックしたボタンに.prev-btnクラスがついていたら、その前のスライドにactiveを付与する。
282
+ }
283
+
284
+ var dir = $(this).parents('.slide-wrapper');
285
+ toggleChangeBtn(dir);
286
+ });
287
+ })
288
+ });
289
+ ```

1

タグにJavaScriptを追加致しました。

2021/06/02 08:28

投稿

punchan36
punchan36

スコア105

title CHANGED
File without changes
body CHANGED
File without changes