【发布时间】:2021-02-09 09:00:30
【问题描述】:
我正在制作一个滑动滑块。我的目标是进行倒计时,在每次幻灯片更改时重置其值。如果幻灯片自动更改,倒计时重置很好,并在下一张幻灯片上再次开始倒计时。 问题是,如果我点击导航点,那么我会有某种双重倒计时。我认为 clearInterval 会开始另一个倒计时,但之前的倒计时不会从线程执行中删除。
var autoplay = 20000;
var swiper = new Swiper('.swiper-container', {
pagination: '.swiper-pagination',
paginationClickable: true,
watchSlidesProgress: true,
autoplay: 20000,
onProgress: elipse
});
function elipse() {
clearInterval(timer);
var countdownNumberEl = document.getElementById('countdown-number');
var countdown = 20;
countdownNumberEl.textContent = countdown;
var timer = setInterval(frame, 1000);
function frame(){
countdown = --countdown <= 0 ? 20 : countdown;
countdownNumberEl.textContent = countdown;
}
}
var swiperBullet = document.getElementsByClassName("swiper-pagination-bullet");
for (var i = 0; i < swiperBullet.length; i++) {
swiperBullet[i].addEventListener('click', function () {
elipse();
});
}
有人可以帮我解决这是怎么回事吗?
【问题讨论】:
-
您的变量
timer仅在elipse函数的范围内可用。 -
如果我改变定时器变量的范围,结果是一样的。我已经试过了。
-
您的
clearInterval不在函数或任何东西中。它在您的elipse函数启动间隔之前执行。 -
@AndréCastro 在
elipse()之前声明计时器并将var timer = setInterval(frame, 1000);更改为timer = setInterval(frame, 1000); -
现在可以了。非常感谢@angel.bonev。问题是计时器不是全局的。解决了。也非常感谢所有做出贡献的人。
标签: javascript countdown clearinterval swiper.js