2014-12-02 3 views
3

Я пытаюсь использовать слайдер Slider для создания слайдера, который позволяет пользователю выбрать заголовок раздела и увидеть слайд для него, а также дать возможность для автовоспроизведения.slick slider - синхронизация автовоспроизведения и активная навигация

Все работает отлично. Но мне нужно каким-то образом переписываться, чтобы сделать так, чтобы при его автовоспроизведении он соответствовал активной навигации и менял цвет.

В настоящий момент он отображает только новый цвет для активного названия слайдов, если пользователь нажимает на него. Я хочу, чтобы это было сделано на автовоспроизведении также

как бы я это сделал ??

Вот код, я работаю прямо сейчас

Js Bin

Единственное, что я изменился, что вариант автозапуск, который не существует на демо скользкий слайдера

$('.slider-for').slick({ 
slidesToShow: 1, 
slidesToScroll: 1, 
arrows: false, 
fade: true, 
asNavFor: '.slider-nav', 
autoplay:true 

    }); 
$('.slider-nav').slick({ 
slidesToShow: 3, 
slidesToScroll: 1, 
asNavFor: '.slider-for', 
dots: true, 
centerMode: true, 
focusOnSelect: true 
}); 

ответ

4

http://jsfiddle.net/bpbaz10L/

$('.slider-for').slick({ 
    slidesToShow: 1, 
    slidesToScroll: 1, 
    arrows: false, 
    fade: true,   
    autoplay:true, 
    //trigger after the slide appears 
    // i is current slide index 
    onAfterChange:function(slickSlider,i){ 
     //remove all active class 
     $('.slider-nav .slick-slide').removeClass('slick-active'); 
     //set active class for current slide 
     $('.slider-nav .slick-slide').eq(i).addClass('slick-active');   
    } 

}); 


//set active class to first slide 
$('.slider-nav .slick-slide').eq(0).addClass('slick-active'); 
+0

Это работало большое .. спасибо. Если у вас есть время, вы могли бы объяснить, какова роль i is и eq. ? Просто чтобы я мог научиться эффективно использовать его в будущем –

+1

onAfterChange return i - индекс текущего слайда. Для eq см. Это [ссылка] (http://api.jquery.com/eq/). «_Удалить набор согласованных элементов в один из указанных указателей». Когда он узнает текущий индекс, тогда мы можем знать, что слайд в навигации должен быть установлен на активный – dm4web

+0

Для кого-либо, кто сталкивался с этой проблемой + яростно искал для решения проблемы + задавался вопросом, почему 'onAfterChange' не работает: см. Https://github.com/kenwheeler/slick#events Обратный вызов onAfterChange теперь устарел в пользу события afterChange. – simmer

0

dm4web answe r идеально подходит, если вы показываете все слайды, которые у вас есть в навигаторе. Если у вас есть слайды, которые скрыты (скажем, у вас есть 12 слайдов, но показывает только 8 в вашем нав сразу), вы можете сделать что-то подобное, как

$('.slider-nav').on('afterChange', function(){ 

    $('.slider-nav .slick-slide').removeClass('current'); 
    $('.slider-nav .slick-active:first').addClass('current'); 
}); 

//set active class to first slide 
$('.slider-nav .slick-active:first').addClass('current'); 
7

Если вы используете Slick Slider Версии: 1.5. 5 вам нужно будет позвонить afterChange on().

// function event,slick and index 
 
// version 1.5+ uses slick-current stead of slick-active 
 
$('.slider-for').on('afterChange', function(event,slick,i){ 
 
    $('.slider-nav .slick-slide').removeClass('slick-current'); 
 
    $('.slider-nav .slick-slide').eq(i).addClass('slick-current');  \t \t \t \t 
 
}); 
 

 
// remember document ready on this 
 
$('.slider-nav .slick-slide').eq(0).addClass('slick-current'); \t

0
function _Slider(){ 
     $('#hm-slider ul').slick({ 
      dots: false, 
      infinite: true, 
      arrows:false, 
      autoplay: true, 
      autoplaySpeed: 5000, 
      fade: true, 
      slidesToShow: 1, 
      slidesToScroll: 1, 
      asNavFor: '#slider-dots', 
     }); 
     $('#slider-dots').slick({ 
      slidesToShow: 5, 
      slidesToScroll: 1, 
      asNavFor: '#hm-slider ul', 
      dots: false, 
      centerMode: false, 
      focusOnSelect: true, 
      variableWidth: true, 
      centerMode: true, 
      useCSS:true 
     }); 

     //set active class to first slide 
     $('#slider-dots .slick-slide').removeClass('slick-active'); 
     $('#slider-dots .slick-slide').eq(0).addClass('slick-active'); 
     $('#hm-slider ul').on({ 
      beforeChange: function(event, slick, current_slide_index, next_slide_index) { 
       //remove all active class 
       $('#slider-dots .slick-slide').removeClass('slick-active'); 
       //set active class for current slide 
       $('#slider-dots .slick-slide[data-slick-index='+next_slide_index+']').addClass('slick-active'); 
      } 
     }); 

    } 
Смежные вопросы