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

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

ただいまの
回答率

91.80%

  • jQuery

    4087questions

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

  • プラグイン

    221questions

    プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

  • スライダー

    24questions

    GUIのグラフィカルウィジェットのひとつです。インジケーターを動かすことで値を調節可能とします。

jQueryプラグインSlickのautoplayが止まらない

解決済

回答 3

投稿 2016/02/01 17:01

  • 評価
  • クリップ 1
  • VIEW 4,019

発生している問題

jQueryのスライダープラグインSlickを利用して自動再生するスライダーを実装しています。
自動再生しつつ、最後のスライドで停止したいと思っているのですが、
自動再生をオンにした際(autoplay:ture)無限ループ(infinite:flase)が効いていません。

afterChangeなどを使った方法で、解決できないかと思ったのですがうまくいきません。
ご教示ください。

ソースコード

$(document).ready(function(){
  $('.slider').slick({
  slidesToShow: 1,
  infinite:false,
  autoplay: true,
  pauseOnHover:false,
  autoplaySpeed: 2000,
  arrows: false,
  fade: true
  });
});

slick公式

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

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

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

    クリップした質問はマイページの「クリップ」タブからいつでも見ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+1

既に回答は出ているようですがafterChangeイベントの引数で現在のスライド位置・スライドの枚数を取得することができるようです。
コレを利用すれば外側に別途変数を保持する必要がなくなるかと思います。

var $slider = $('.slider')
  .on('afterChange', function(evt, slick, currentSlide) {
    // currentSlide は現在のスライドのインデックス 0 からカウント
    var slideCount = slick.slideCount - 1;
    if(slideCount === currentSlide) {
      $(this).slick('slickPause');
    }
  })
  .slick({
    slidesToShow: 1,
    autoplay: true,
    pauseOnHover:false,
    autoplaySpeed: 2000,
    arrows: false,
    fade: true
  });


参考 slick - Events

afterChange
Arguments : slick, currentSlide

投稿 2016/02/04 19:01

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

checkベストアンサー

0

infinite は autoplay に対するオプションではありません。
最後の要素までいった場合に先頭に戻すか、
最初の要素を次の要素として表示するかというオプションです。

対応するとなると以下のようになるかと思います。

(document).ready(function(){
  var $slider  = $('.slider');
  var $slide   = $slider.children();
  var slideLen = $slide.length;
  $slider
    .slick({
      slidesToShow: 1,
      infinite:false,
      autoplay: true,
      pauseOnHover:false,
      autoplaySpeed: 2000,
      arrows: false,
      fade: true
    })
    .on('afterChange', function() {
      var $self = $(this);
      if((slideLen - 1) <= $self.slick('slickCurrentSlide')){
        $self.slick('slickSetOption', 'autoplay', false);
      }
    });
});

アニメーションがフェードなので、スワイプを切る想定ですかね?
その場合 arrow や dots を表示させないのであれば、
スライダーやカルーセルと呼ばれるような仕組みではないですね。
slick ではなくて他のプラグインなどを使う方が良い気はします。

投稿 2016/02/04 16:51

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2016/02/04 17:12

    上記コードで解決しましたので、
    ベストアンサーにさせていただきました!

    キャンセル

  • 2016/02/04 17:13

    スワイプは切る想定です。
    とはいえ、他のプラグインも検討します。ありがとうございました。

    キャンセル

0

infiniteオプションですが「無限ループ」のオン・オフを設定するだけでした。
フェードがオンだと効果がわからないのですが、
フェードをオフにすると、下記のようになります(autoplayはオンの状態です)

  • 無限ループオン:最後のスライドまで行くと、最初のスライドが画面右から流れてくる。
  • 無限ループオフ:最後のスライドまで行くと、左にスライドして、最初のスライドまで戻っていく。

最後のスライドまで行くと止まる、という機能は含まれていません。
なので、最後のスライドまで行ったタイミングで、下記のメソッドを使う形になると思います。

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

「slickPause」は、オートプレイを止めるメソッドです。
任意のタイミング(今回の場合は最後のスライドが表示されたタイミング)で使うようにJSを書けば良いと思います。

<div class="slider">
  <div>sample1</div>
  <div>sample2</div>
  <div>sample3</div>
</div>
var $slider = $('.slider'),
    contentLength = $slider.children().length - 1; // .slider直下の要素の数を取得。0から始まるインデックス番号と合致させる為に1引く。この数は最後のスライド番号と同じになります。

$slider.slick({
  slidesToShow: 1,
  autoplay: true,
  pauseOnHover: false,
  autoplaySpeed: 2000,
  arrows: false,
  fade: true
  }).on('afterChange', function() {
    // 現在のスライド番号(最初は0)を取得。
    var currentSlide = $slider.slick('slickCurrentSlide'); 

    // 最後のスライド番号と一致したら止める。
    if(currentSlide === contentLength){
      $slider.slick('slickPause');
    }
  });

投稿 2016/02/04 16:22

編集 2016/02/04 17:06

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2016/02/04 17:16 編集

    回答ありがとうございます!
    infiniteオプションの動作その通りでした。
    slick('slickPause');
    でも
    slick('slickSetOption', 'autoplay', false);
    でも止めることができました。

    キャンセル

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

ただいまの回答率

91.80%

関連した質問

同じタグがついた質問を見る

  • jQuery

    4087questions

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

  • プラグイン

    221questions

    プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

  • スライダー

    24questions

    GUIのグラフィカルウィジェットのひとつです。インジケーターを動かすことで値を調節可能とします。

閲覧数の多いjQueryの質問