Слайд-шоу IMG / циклирование галереи ПОСЛЕ фильтрации элементов по классам

#jquery #class #filter #image-gallery

#jquery #класс #Фильтр #изображение-галерея

Вопрос:

Я все еще новичок в jQuery, и у меня есть этот простой код слайд-шоу / галереи, который отлично работает, который я использовал в нескольких веб-проектах:

 function f_slideShow(){
    var v_fadeTime = 600;
    var v_active = $("#divPFpics IMG.active");
    var v_next =  v_active.next().length ? v_active.next() : $("#divPFpics IMG:first");

    if (v_active.length == 0) 
        {
            v_active = $("#divPFpics IMG:last");
            v_active.addClass("last-active");
        }

    v_next.css({opacity: 0.0})
        .addClass("active")
        .animate({opacity:1.0}, v_fadeTime, function() {
            v_active.removeClass("active last-active");
    });
}
  

В моем текущем проекте используется длинный список изображений, которые классифицированы по классам CSS. Как и сейчас, это слайд-шоу циклически перебирает ВСЕ мои изображения.

Мой вопрос: как и куда мне поместить метод .filter(), чтобы этот код циклически просматривал ТОЛЬКО изображения, содержащие выбранный класс CSS? Я заставил все остальное работать в галерее, и это меня убивает, поэтому я, наконец, перехожу к Stackoverflow. Спасибо всем!

Ответ №1:

 var v_active = $("#divPFpics IMG.active");
var v_next =  v_active.next().length ? v_active.next() : $("#divPFpics IMG:first");
  

Эти строки имеют решающее значение, они создают список, по которому будет циклически проходить ваше слайд-шоу.

Хотя это не показано, я полагаю, что ваша функция вызывается каждые x секунд.

v_active отображается ли изображение в данный момент.

v_next является ли изображение следующим за ним в DOM.

Вы могли бы сделать это таким образом :

 var v_active = $("#divPFpics IMG.active");
var v_next = v_active.next().length ? v_active.next() : $("#divPFpics IMG:first");
while (!v_next.hasClass('yourClassName')) {
  v_next = v_active.next().length ? v_active.next() : $("#divPFpics IMG:first");
} 
  

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

Если вы действительно хотите использовать .фильтруйте, вам придется переписать эти строки. Это связано с тем, как выбирается следующее изображение. Вам нужно будет найти способ сохранить положение текущего активного изображения, выбрать свой набор изображений ( $('divPFpics').filter(...) ) и выбрать следующий.