#javascript #html #jquery #css
Вопрос:
У меня есть слайд-шоу из divs, которое автоматически прокручивается, но как мне сделать так, чтобы, когда я нажимаю на целевую ссылку, она ведет меня туда и останавливает цикл слайд-шоу. Более того, после нескольких циклов слайды начинают засоряться и накапливаться друг на друге, может кто-нибудь, пожалуйста, помочь исправить эту ошибку, спасибо.
Это мой текущий код:
parent div {
display: none;
position: absolute;
}
#parent div:first-child {
display: block;
}
#parent > div {
width: 400px;
height: 250px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="slideshow-container" id="parent">
<script>
function Divs() {
var divs = $("#parent div"),
now = divs.filter(":visible"),
next = now.next().length ? now.next() : divs.first(),
speed = 1000;
now.fadeOut(speed);
next.fadeIn(speed);
}
$(function () {
setInterval(Divs, 1400);
});
</script>
<div class="box" id="food">
<h2>hi</h2>
</div>
<div class="box" id="infrastructure">
<h2>bye</h2>
</div>
<div class="box" id="culture">
<h2>hi</h2>
</div>
<div class="box" id="nature">
<h2>bye</h2>
</div>
</div>
Комментарии:
1. сохраните значение, возвращенное из
setInterval
(i = setInterval(...)
), и используйте его вclearInterval
. (clearInterval(i)
)2. подождите, но тогда как мне указать, что когда я нажму на ссылку, она будет использовать clearInterval,
3. использование события onClick..
Ответ №1:
Если вы зададите свой интервал переменной, вы можете направить прослушиватель событий на родительский div и по щелчку мыши сбросить таймер.
вот решение:
const interval= setInterval(divs, 1400)
const parentContainer = document.querySelector('#parent')
parentContainer.addEventListener('click', event => {
clearInterval(interval)
console.log(event.target.parentNode)
})
divs(interval)
function divs() {
var divs= $('#parent div'),
now = divs.filter(':visible'),
next = now.next().length ? now.next() : divs.first(),
speed = 1000;
now.fadeOut(speed);
next.fadeIn(speed);
}
#parent div {
display: none;
position: absolute;
}
#parent div:first-child {
display: block;
}
#parent > div {
width: 400px;
height: 250px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="slideshow-container" id="parent">
<div class='box' id='food'>
<h2>food</h2>
</div>
<div class='box' id='infrastructure'>
<h2>infrastructure</h2>
</div>
<div class='box' id='culture'>
<h2>culture</h2>
</div>
<div class='box' id='nature'>
<h2>nature</h2>
</div>
</div>
Комментарии:
1. Привет, это заставляет его зависать только при щелчке, но я хочу, чтобы при нажатии на определенную целевую ссылку он останавливался на целевом div
2. Я не совсем уверен, решит ли это проблему, но я добавил фокус в этом событии. В моем предварительном просмотре он останавливается на тексте.
3. Поэтому я добавил вам консоль. войдите в систему, и, как вы можете видеть, вы достигнете div на том, что вы нажали, и слайд остановится.
4. приятно, но есть ли способ, чтобы, если я нажму на нее еще раз, она возобновила слайд-шоу?