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

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

新規登録して質問してみよう
ただいま回答率
85.48%
jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

jQuery

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2121閲覧

Slickでカルーセルをクリックしたらautoplayを止めたい

Kuriii

総合スコア13

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

jQuery

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/11/12 07:53

編集2018/11/13 06:23

Slickでカルーセルをクリックしたらautoplayを止めたい

Slickを使用してレスポンシブなスライダーを作っています。
スライダー下部に画像の枚数分付与されるカルーセル「●」をクリックした際に、
autoplayが止まるようにしたいです。
初期表示時はautoplayを実行し、カルーセルをクリックした時にのみautoplayが止まるイメージです。
ul.sliderにてslickのアウターを指定しています。

発生している問題

●正常(autoplayが止まる)
①safari、961px以上のchrome
②960px以下かつchromeで、一度autoplayが実行され、2枚目のスライドが表示された以降、カルーセルをクリック

●問題(autoplayが止まらない)
①960px以下かつchromeで、ローディングして画面初期表示直後にカルーセルをクリック
②windows版のchromeに限り、960px以下にウィンドウを縮めた状態で、正常①でautoplayを止めた後に別のウィンドウをアクティブにする

$('.slick-dots li').clickortouch(function(){ $('.slider').slick('slickSetOption', 'autoplay', false, true); });

該当のソースコード

$('.slider').slick({ infinite: true, dots: true, slidesToShow: 1, centerMode: true, centerPadding:'0', variableWidth: true, autoplay: true, autoplaySpeed: 3000, speed: 1000, responsive: [{ breakpoint: 960, settings: { variableWidth: false, } }] }); $('.slick-dots li').clickortouch(function(){ $('.slider').slick('slickSetOption', 'autoplay', false, true); });

最終的に試したこと

$('.slider').slick({ infinite: true, dots: true, slidesToShow: 1, centerMode: true, centerPadding:'0', variableWidth: true, autoplay: true, autoplaySpeed: 3000, speed: 1000, waitForAnimate: false }); $(window).on('load resize', function() { var windowWidth = window.innerWidth; if (windowWidth < 960) { $('.slider').slick('slickSetOption', 'variableWidth', false, true); } else { $('.slider').slick('slickSetOption', 'variableWidth', true, true); } }); var ua = navigator.userAgent; if (ua.indexOf('iPhone') > 0 || ua.indexOf('Android') > 0 && ua.indexOf('Mobile') > 0) { $('.slick-dots li').clickortouch(function(){ $('.slider').slick('slickSetOption', 'autoplay', false, true); }); } else { $(document).on('click', '.slick-dots li button', function() { $('.slider').slick('slickPause'); $('.slider').slick('slickSetOption', 'autoplay', false, true); }); }

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

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

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

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

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

guest

回答1

0

ベストアンサー

"slickSetOption"では止まりません。"slickPause"を使ってください。

jQuery

1$('.slider').slick('slickPause');

http://kenwheeler.github.io/slick/

jQuery

1var autoplay = true; 2$(document).on('breakpoint', function(event, slick, breakpoint) { 3 if (!autoplay) { 4 $('.slider').slick('slickPause'); 5 } 6}); 7$('.slick-dots li').click(function(){ 8 autoplay = false; 9 $('.slider').slick('slickPause'); 10});

投稿2018/11/13 02:47

編集2018/11/13 05:24
x_x

総合スコア13749

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

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

Kuriii

2018/11/13 04:48

回答ありがとうございます。 試した結果、下記の場合にautoplayが止まりませんでした。 ▼Chrome  初期表示後に961px以上のウィンドウ幅でautoplayを止め、その後960px以下にウィンドウを縮小する 961px以上のウィンドウ幅では一時停止ができましたが、その状態のまま960px以下にウィンドウを縮小すると再びautoplayが動き出してしまいます。 960px以下のウィンドウ幅で初期表示後にautoplayを止めることは可能です。 一つ気になるのは、console.log($('.slider').slick('slickGetOption','autoplay'))で 最初のやり方だとautoplay : falseになりますが、ご教示いただいたやり方ではautoplay : trueのままです。
x_x

2018/11/13 05:23

slickPauseは内部で動いているsetIntervalをクリアする唯一の方法なので変えられませんが、responsiveがあるとウィンドウ幅で初期化処理が走って再度有効にされてしまうようです。 対策を追記するので試してみてください。
Kuriii

2018/11/13 06:17

再度ありがとうございます。このコードで解決しました。 breakpointイベントがあったんですね。 > responsiveがあるとウィンドウ幅で初期化処理が走って再度有効にされてしまうようです。 ということは、responsiveがあると、その幅に到達した際に初期化処理でsetIntervalが再設定されてしまうということですかね? ChoromeでもAndroidでもSafariでも動いたので助かりました;;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問