Прослушиватель событий для Cycle2 Slider

Я использую плагин jQuery цикл2 ( http://jquery.malsup.com/cycle2/), и я хочу нацелить другой элемент, когда конкретный слайд активен.

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

Слайдер цикла применяет класс с именем cycle-slide-active на активный слайд, а затем удаляет его, как только он переходит на следующий слайд.

Я могу заставить его работать, используя грязный бесконечный цикл, чтобы проверить класс по идентификатору, которому он назначен, следующим образом:

function checkForChanges() {
    var slide = jQuery('.cycle-slide-active:first').attr('id');
    var active

    if ( slide == s1) {
        active = s1;
    } else if ( slide == s2 ) {
        active = s2;
    } else if ( slide == s3 ) {
        active = s3;
    } else if ( slide == s4 ) {
        active = s4;
    }

    jQuery('.celeb-button').css('opacity', 0);
    jQuery('.celeb-button-'+active).css('opacity', 1);

    setTimeout(checkForChanges, 500);
}

Однако такой бесконечный цикл, который я знаю, является неправильным, и это также означает, что я не могу использовать эффект наведения, чтобы выделить цвет, поскольку бесконечный цикл постоянно изменяет непрозрачность до 0.

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

Любые идеи очень приветствуются.

1 ответ

Вы можете использовать встроенное событие. Я использую функцию, которая позволяет инициализировать слайд-шоу без кода.

"opts" - это хеш, который содержит довольно много значений, чтобы увидеть их, вы можете просмотреть список в консоли, используя

console.log(Object.keys(opts));

opts.currSlide дает индекс слайда.

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

Если вы инициализируете слайд-шоу программно, измените имя класса ".cycle-slideshow" на свой идентификатор. Это отдельная команда. Я запускаю это непосредственно перед загрузкой слайда, вы также можете использовать 'цикл после', если вы хотите, чтобы он запускался сразу после загрузки слайда.

Ваш код будет выглядеть примерно так:

$( '.cycle-slideshow' ).on( 'cycle-before', function( event, opts, prev, next) {
    if ( prev.id == s1) {//you are on the second slide
        active = s2;
    } else if ( prev.id == s2 ) {
        active = s3;
    } else if ( prev.id == s3 ) {
        active = s4;
    } else if ( prev.id == s4 ) {
        active = s1;
    }
});
Другие вопросы по тегам