JQuery, если тогда проблема слайд-шоу - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть слайд-шоу, которое управляется вручную с помощью предыдущей и следующей кнопок. Он отлично работает, но использование insertBefore и insertAfter выглядит неаккуратно, поэтому я хотел бы изучить некоторые другие методы. Вместо этого я думаю: «если это последнее изображение, вернитесь к первому + противоположное для движения назад.

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

Syntaxual? if (slide == $('.z:last')) выглядит подозрительно для меня.

Тестовая площадка: http://brantley.dhut.ch/

Спасибо!

Вот мой JavaScript:

        $('#next').click(function() {
            var slide = $('.z:visible'),
                next  = $('.z:visible').next();

            slide.fadeOut(400, function() {
                slide.removeClass('active');
                if (slide == $('.z:last')) {
                    $('.z:first').addClass('active');
                    bromance();
                    $('.z:first').fadeIn(400);
                } else {
                    next.addClass('active');
                    bromance();
                    next.fadeIn(400);
                }
            });
            return false;
        });

Ответы [ 4 ]

0 голосов
/ 14 сентября 2011

next = $ ('. Z: visible'). Next ();

проверьте приведенное ниже условие и соответственно укажите следующее изображение.

if($('.z:last')){
   next = $(".z:first")
}
else{
   next  = $('.z:visible').next();
}
0 голосов
/ 14 сентября 2011

Попробуйте это:

if (slide[0] == $('.z:last')[0]) { ...

jQuery не возвращает ссылку на элемент DOM напрямую, он возвращает объект, похожий на массив, где каждый элемент массива является элементом DOM, соответствующим выбранному вами селектору. Это означает, что при сравнении результатов двух селекторов сравниваются два разных объекта типа массива, которые никогда не будут совпадать, даже если они содержат одинаковые элементы. Вместо этого сравните первый элемент в каждом массиве (поскольку в любом случае вы ожидаете только один элемент).

0 голосов
/ 14 сентября 2011

Я бы сравнил идентификаторы элементов на равенство.

Изменим if (slide == $('.z:last')) на if (slide.attr('id') === $('.z:last').attr('id')).

Или вы можете проверить, виден ли последний слайд так:

if ($('.z:last:visible')) {
    // last slide is visible
}
0 голосов
/ 14 сентября 2011

почему бы вам не использовать slide = $('.active') и попробовать :first-child вместо :first

...