Я пытаюсь создать очень простое слайд-шоу, пройдя DOM. На данный момент я могу найти первый слайд, исчезнуть и исчезнуть в следующем. Однако он работает только один раз.
http://jsfiddle.net/tmyie/fEEu6/3/
$('.img').first().siblings('.img').hide();
$('.next').click(function () {
$(this).siblings('.slides').children('.img:first-child').fadeOut().next().fadeIn();
});
<div class="container">
<div class="slides">
<div class="img">1</div>
<div class="img">2</div>
<div class="img">3</div>
</div>
<div class="next">→</div>
</div>
Кто-нибудь знает, почему он работает только на одном слайде, и только до 3? Я использую это как учебное упражнение, поэтому любая помощь будет отличной.
Просто перейдите, через что.img видно.
$('.next').click(function(){
$(this).closest('.container').find('.slides > .img:visible').hide().next().fadeIn();
});
Если вы хотите вернуться, просто мы.prev() вместо.next()
Я считаю, что это не работает, потому что вы используете ": First-child",
$(this).siblings('.slides').children('.img:first-child').fadeOut().next().fadeIn();
С помощью этого кода он всегда будет исчезать первым ребенком и исчезать следующим. Однако после первого хода 1-й ребенок уже скрыт, а второй ребенок уже отображается, вы не увидите никакой разницы.
Может быть, вы можете попробовать добавить фиктивный класс
JQuery
if( $(this).siblings('.slides').children('.img.dummyClass').next().length )
$(this).siblings('.slides').children('.img.dummyClass').fadeOut().removeClass('dummyClass').next().fadeIn().addClass('dummyClass');
HTML
<div class="container">
<div class="slides">
<div class="img dummyClass">1</div>
<div class="img">2</div>
<div class="img">3</div>
<div class="img">4</div>
</div>
<div class="next">→</div>
ПРИМЕЧАНИЕ. Это не будет скользить мимо последнего слайда (из-за условия IF). Но поскольку это не является частью вашего вопроса, я проигнорировал возвращение к слайду 1.
добавленной
вы можете добавить и удалить активный класс для img следующим образом:
$('.img').first().addClass('active').siblings('.img').hide();
$('.next').click(function () {
$(this).siblings('.slides').children('.active').fadeOut().removeClass('active').next().addClass('active').fadeIn();
});