У меня есть слайдер с некоторыми панелями, которые вставляются и выходят с помощью стрелок. Функция следующей стрелки такова:
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/.
При нажатии на следующее поле (справа) или на следующую стрелку, следующий слайд скользит внутрь, а затем следующий после этого делает то же самое. При нажатии на центральный активный слайд ничего не должно происходить. При нажатии на предыдущую стрелку или предыдущее поле (слева) поле слева должно скользить в центр, а центральный блок должен двигаться вправо.
Пожалуйста, помогите, я знаю, что я почти там. благодаря
Наконец, это то, с чем я закончил, и я надеюсь, что это поможет рассмотреть время, которое я потратил, написав ЭТУ скрипку 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;
}
});
;)
Пинта!? Какое доброе внимание :D
;)