Я пытаюсь создать слайд-шоу для проекта.
Код, который я построил, довольно прост, но по какой-то причине я могу заставить работать только следующие стрелки, а не предыдущие.
При нажатии кнопки «Далее» удаляется активный класс из текущего изображения, добавляется этот класс к следующему изображению и изменяется отображение на новое активное изображение.
Когда вы нажимаете предыдущий, он удаляет активный класс, но не добавляет никаких классов к другим элементам. Затем он по какой-то причине меняет отображение на окончательное изображение.
Я попытался изменить порядок вызова функций. Я также пытался увидеть, что происходит, когда активный класс добавляется к последнему изображению (у него та же проблема, но в обратном порядке, так что теперь не работает, но предыдущий в порядке).
var activeSlide = $('.active');
var nextSlide = activeSlide.next('.slide');
var prevSlide = activeSlide.prev('.slide');
var arrow = $('.arrow');
var firstSlide = $('.first');
var lastSlide = $('.last');
// slideshow functions
// next arrow
function nextArrow () {
if (!activeSlide.hasClass('last')) {
activeSlide.removeClass('active');
nextSlide.addClass('active');
activeSlide = nextSlide;
nextSlide = activeSlide.next('.slide');
// check if new slide is last slide and remove the click button
if (activeSlide.hasClass('last')) {
$('.next').fadeOut();
}
}
};
// previous arrow
function prevArrow () {
if(!activeSlide.hasClass('first')) {
activeSlide.removeClass('active');
prevSlide.addClass('active');
activeSlide = prevSlide;
prevSlide = activeSlide.prev('.slide');
// check if new slide is the first slide and remove the click button
if (activeSlide.hasClass('first')) {
$('.previous').fadeOut();
}
}
};
//click element and call functions
$('.arrow').click( function () {
if ($(this).hasClass('next')) {
nextArrow();
} else {
prevArrow();
}
});
#slideshow {
position: relative;
height: 400px;
width: 600px;
margin: 15% auto;
}
.slide {
position: absolute;
top: 0;
left: 0;
z-index: 8;
height: 100%;
width: 100%;
}
.active {
z-index: 10;
}
.arrow {
text-decoration: none;
display: inline-block;
padding: 8px 16px;
}
.arrow:hover {
background-color: #ddd;
color: black;
opacity: 0.9;
cursor: pointer;
}
.previous {
left: 0;
}
.next {
right: 0;
}
.arrow {
z-index: 11;
background-color: #ddd;
color: black;
position: absolute;
top: 50%;
opacity: 0.5;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="slideshow">
<div id="slides">
<img class="slide active first" src="Toscana 1.jpg" alt="image of toscana, slideshow image 1" />
<img class="slide" src="Toscana 2.jpg" alt="image of toscana, slideshow image 1" />
<img class="slide" src="Toscana 3.jpg" alt="image of toscana, slideshow image 2" />
<img class="slide last" src="Toscana 4.jpg" alt="image of toscana, slideshow image 3" />
</div>
<div class="previous arrow">‹</div>
<div class="next arrow">›</div>
</div>
<script src="javascript/practice.js"></script>
Теоретически вы должны быть в состоянии щелкнуть далее и увидеть следующее изображение в последовательности. Затем, когда вы хотите увидеть предыдущее изображение в последовательности, вы сможете щелкнуть предыдущее, в результате чего он удалит активный класс из текущего изображения и добавит его к изображению ранее.
Очень ценю помощь в понимании того, что происходит, если кто-то вообще может помочь.