質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

10732閲覧

slick:初期表示スライドを動的に変更したい

yokoh

総合スコア9

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/09/23 18:36

編集2018/09/25 07:51

前提・実現したいこと

・モーダル内で slickスライダーを表示させており、クリックしたボタンによって初期スライド位置を変更したいのです。
・ボタンをクリックするとすべて同一のモーダルが開きます。
・ボタンをクリックすると、初期表示するスライドの番号を取得します。
・その番号を slickSetOption で initialSlide の値としてセットしたいのですがうまくいきません。
※slick公式サイト: http://kenwheeler.github.io/slick/

現在の挙動

・表示したいスライド番号は取得できているが、どのボタンをクリックしても1番目のスライドが表示されてしまう。
・モーダルを開いた状態で、スライドを変更してからモーダルを閉じると、最後に表示されていたスライドが次回 初期表示される。

該当のソースコード

html

1<ul> 2 <li><button class="modal" data-tgt="modal1">スライド(1)</button></li> 3 <li><button class="modal" data-tgt="modal1" data-slide="1">スライド(2)</button></li> 4 <li><button class="modal" data-tgt="modal1" data-slide="2">スライド(3)</button></li> 5 <li><button class="modal" data-tgt="modal1" data-slide="3">スライド(4)</button></li> 6</ul>

javaScript

1var slideNum = 0; 2 3// modal 4$('.modal').on('click', function () { 5 var $modal = $('#' + $(this).attr('data-tgt')); 6 var $overlay = $('.modal_overlay'); 7 8 if($(this).attr('data-slide')) { 9 slideNum = $(this).attr('data-slide'); 10 modalSlider.slick('slickSetOption', 'initialSlide', slideNum, true); 11 } 12 13 modalSlider.slick('setPosition'); // 初期化 14 $overlay.fadeIn(); 15 $modal.show(); 16}); 17 18 19// modal slider 20var modalSlider = $('.modal_slider').slick({ 21 autoplay: false, 22 slidesToShow: 1, 23 slidesToScroll: 1, 24 infinite: true, 25 arrows: true, 26 initialSlide: slideNum 27});

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2018/09/23 18:53

(質問文は編集できます)モーダルを含めプラグイン/ライブラリは公式配布サイトのURLを質問文に追記ください。(URLにはリンクを張ることができます)
yokoh

2018/09/23 18:59

ご指摘ありがとうございます。追記しました。
m.ts10806

2018/09/23 23:21

slideNum に0が固定で入っていますが、これは?
yokoh

2018/09/24 01:41 編集

デフォルトを設定しています。その下のボタンクリック時の function の中で slideNum を書き換えようとしています。「var slideNum = 0;」を「var slideNum;」としても挙動は変わらずです。
guest

回答1

0

自己解決

試しに、変更するオプションを initialSlide ではなく autoplay など他のものにしてみたら、ちゃんと変更されました。

javaScript

1modalSlider.slick('slickSetOption', 'initialSlide', slideNum, true);

slickSetOption で initialSlide を変更することはどうにもできなかったので、
slickGoTo でスライドを移動させることで対処しました。

javaScript

1$('.modal').on('click', function () { 2 var $modal = $('#' + $(this).attr('data-tgt')); 3 var $overlay = $('.modal_overlay'); 4 5 if($(this).attr('data-slide')) { 6 slideNum = $(this).attr('data-slide'); 7 modalSlider.slick('slickGoTo', slideNum); 8 } 9 10 modalSlider.slick('setPosition'); // 初期化 11 $overlay.fadeIn(); 12 $modal.show(); 13});

ただし、1回目にスライダーを表示させた時に slickGoTo のスライド移動の動きがチラッと出てしまうので(2回目以降は出ない)、スライドの動きを 「fade: true」 オプションでフェードにすると違和感がなくなりました。

投稿2018/09/25 07:59

yokoh

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問