有没有办法在触发新的之前清除以前的 setInterval
Is there is any way to clear the previous setInterval before firing new one
这是 运行 swiper 滑块的代码,当幻灯片移动或幻灯片更改时,我触发一个移动函数,该函数将 setInterval 方法触发到滑块上方的进度线以增加其宽度100%,但是当我在自动播放时间结束前滑动滑块时 运行 函数再次移动并且这个新函数触发一个新的 setInterval 除非旧的还没有完成,所以我在这里有两个 setintervals 冲突。
无论如何,我需要清除旧的,但是如果它的时间还没有结束的话。
我希望你理解并知道问题到底出在哪里。
最后谢谢,对不起我的英语:)
代码下面有一个link请看
var autoplay = 5000;
var swiper = new Swiper('.swiper-container', {
pagination: '.swiper-pagination',
paginationClickable: true,
watchSlidesProgress: true,
autoplay: autoplay,
onProgress: move
});
function move() {
var elem = document.getElementById("progress");
var width = 1;
var autoplayTime = autoplay / 100;
var id = setInterval(frame, autoplayTime);
function frame() {
if (width >= 100) {
clearInterval(id);
} else {
width++;
elem.style.width = width + '%';
}
}
}
link => https://codepen.io/shady-agmy/pen/OJVmNPw?editors=1010
您正好在动画上清除了帧间隔,但您没有在后续每次调用 move 时清除动画间隔
var autoplay = 5000;
var swiper = new Swiper('.swiper-container', {
pagination: '.swiper-pagination',
paginationClickable: true,
watchSlidesProgress: true,
autoplay: autoplay,
onProgress: move
});
var previousid;
function move() {
var elem = document.getElementById("progress");
var width = 1;
var autoplayTime = autoplay / 100;
clearInterval(previousid);
previousid = setInterval(function(_id) { return function() {
if (width >= 100) {
clearInterval(_id);
} else {
width++;
elem.style.width = width + '%';
}
}}(previousid), autoplayTime);
}
console.log(swiper)
这是 运行 swiper 滑块的代码,当幻灯片移动或幻灯片更改时,我触发一个移动函数,该函数将 setInterval 方法触发到滑块上方的进度线以增加其宽度100%,但是当我在自动播放时间结束前滑动滑块时 运行 函数再次移动并且这个新函数触发一个新的 setInterval 除非旧的还没有完成,所以我在这里有两个 setintervals 冲突。 无论如何,我需要清除旧的,但是如果它的时间还没有结束的话。 我希望你理解并知道问题到底出在哪里。 最后谢谢,对不起我的英语:) 代码下面有一个link请看
var autoplay = 5000;
var swiper = new Swiper('.swiper-container', {
pagination: '.swiper-pagination',
paginationClickable: true,
watchSlidesProgress: true,
autoplay: autoplay,
onProgress: move
});
function move() {
var elem = document.getElementById("progress");
var width = 1;
var autoplayTime = autoplay / 100;
var id = setInterval(frame, autoplayTime);
function frame() {
if (width >= 100) {
clearInterval(id);
} else {
width++;
elem.style.width = width + '%';
}
}
}
link => https://codepen.io/shady-agmy/pen/OJVmNPw?editors=1010
您正好在动画上清除了帧间隔,但您没有在后续每次调用 move 时清除动画间隔
var autoplay = 5000;
var swiper = new Swiper('.swiper-container', {
pagination: '.swiper-pagination',
paginationClickable: true,
watchSlidesProgress: true,
autoplay: autoplay,
onProgress: move
});
var previousid;
function move() {
var elem = document.getElementById("progress");
var width = 1;
var autoplayTime = autoplay / 100;
clearInterval(previousid);
previousid = setInterval(function(_id) { return function() {
if (width >= 100) {
clearInterval(_id);
} else {
width++;
elem.style.width = width + '%';
}
}}(previousid), autoplayTime);
}
console.log(swiper)