При нажатии на следующий активный элемент с определенным классом, триггерная функция

0

У меня есть слайдер с некоторыми панелями, которые вставляются и выходят с помощью стрелок. Функция следующей стрелки такова:

var element = $('.projects .popup.active'),    
    next = $('.slider.projects #next'),
    prev = $('.slider.projects #prev'),
    oleft = element.offset().left,
    oright = ($(window).width() - (element.offset().left + element.outerWidth()));

next.unbind("click").on('click', function(e){   
        e.preventDefault();
        $(document).scrollTop(0);
        $('.projects .popup').not(element).removeClass('active');
        element.next('.popup').addClass('active');
        element.prevAll('.popup').css({zIndex: -1});
        element.prevAll('.popup').css({left:'-100%', margin: 0});
        element.nextAll('.popup').css({left:'100%', margin: 0});

        element.removeClass('active');
        element = $('.projects .popup.active');

        element.animate({
            left: '50%',
            marginLeft: -352.5
        },500);
        element.next('.popup').animate({
            left: $(window).width() - (oright / 2),
            marginLeft: 0
        },500);
        element.prev('.popup').animate({
            left: - elemWidth + (oleft / 2),
            marginLeft:0
        }, 500);
        checkarrow();
    });

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

element.next('.popup').on('click', function(e){
    next.trigger('click');
});

Это работает отлично в первый раз, но во второй раз клик работает только на первом

element.next('popup')

который был нажат в первый раз. Класс активно обновляется отлично, но щелчок не работает на следующей панели. Я не могу найти решение.

Вот скрипка http://jsfiddle.net/3sSz2/

Любая помощь могла бы быть полезна. заранее спасибо

Обновить

Благодаря f00bar мне удалось сделать следующие коробки слайдами. Предыдущие, хотя и работают не так, как ожидалось. Вопрос должен быть из строки 100, вероятно, строки 103 в этой скрипке http://jsfiddle.net/3sSz2/11/.

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

Пожалуйста, помогите, я знаю, что я почти там. благодаря

  • 0
    Поиграйте пожалуйста, тогда я смогу помочь ;)
  • 0
    Спасибо f00bar, вот скрипка jsfiddle.net/3sSz2 . Как вы сможете увидеть, когда вы нажмете на следующее поле, оно будет скользить в порядке. Затем, нажав на третье поле, оно не будет работать, но нажав еще раз на второе поле, оно работает. Но это не правильно. еще раз спасибо
Показать ещё 8 комментариев
Теги:
click
triggers
next

1 ответ

1
Лучший ответ

Наконец, это то, с чем я закончил, и я надеюсь, что это поможет рассмотреть время, которое я потратил, написав ЭТУ скрипку Oo

Я прикрепил обработчик клика на элементе.slider, чтобы избежать множественного прослушивателя. Вот он обработчик.

$('.slider').click(function (e) {
    var $slider = $(this),
        data = $slider.data('slider'),
        $slides = $slider.find('.popup'),
        $first = $slides.eq(0),
        $last = $slides.last(),
        $activeItem = $slides.filter('.active'),
        $next = $('.popup-nav.next', this),
        $prev = $('.popup-nav.prev', this),
        $t = $(e.target).closest('.popup, .popup-nav'),
        $nextItem = $activeItem.next('.popup'),
        $prevItem = $activeItem.prev('.popup'),
        way = (
            // Is the target be the next item in the DOM or the 'next arrow'
            ($t.is('.popup-nav.next') || $t.is($nextItem)) ? -1 :
            // Is the target be the next item in the DOM or the 'prev arrow'
            ($t.is('.popup-nav.prev') || $t.is($nextItem)) ? 1 : 0
        );

    switch (way) {
    // previous
    case 1:
        // if the active slide is the last project
        if ($activeItem.is($first)) {
            $first.before($last.css({
                left: +($first.css('left').replace('px', '')) - data.width
            }));
        }
        $activeItem.removeClass('active').prev().addClass('active');
        play.call($slides, {
            way: way,
            width: data.width
        });
        break;
    // next
    case -1:
        // if the active slide is the last project
        if ($activeItem.is($last)) {
            $last.after($first.css({
                left: +($last.css('left').replace('px', '')) + data.width
            }));
        }
        $activeItem.removeClass('active').next().addClass('active');
        play.call($slides, {
            way: way,
            width: data.width
        });
        break;
    }
});
  • 0
    Привет @Джефф, я забыл установить в качестве последнего сценария свое последнее редактирование скрипки ... щелчок по предыдущему элементу действительно работает [можете ли вы подтвердить это?], И я мог бы установить некоторые флаги где-нибудь, чтобы предотвратить конфликты анимации ...! Кстати, я все еще могу помочь вам с вашим проектом ... но отныне мы должны обсуждать в личном сообщении, я думаю ;) Пинта!? Какое доброе внимание :D
  • 0
    Спасибо, это работает потрясающе! Как я могу связаться с вами в частном порядке?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню