javascript - ClearInterval 不起作用,下面的 setInterval 以 2 倍速度重启
问题描述
我有一个简单的幻灯片放映,我想要一个“暂停”和“播放”功能,带有 onClick,使用 setInterval 和 clearInterval。第一个 setInterval 效果很好。以下 clearInterval 在循环中创建一个暂停,但不重置 intervalId,因此,下一个 setInterval 运行得很快。我在这里看到了一些关于这个问题的帖子,但他们并没有解决我的问题。如果有人可以帮助我,那就太好了!
let i = 0;
var elements = document.querySelectorAll('.mes_elements');
function ma_fonction(){
elements[i].style.opacity = 1;
for(let j = 0; j < elements.length; j++){
if(j!=i){
elements[j].style.opacity = 0;
}
}
i++;
if(i == elements.length){ i = 0; }
}
var lecture = true;
var intervalId = setInterval(ma_fonction, 1500);
document.querySelector('.ma_div').addEventListener('click', function() {
if(lecture == true){
clearInterval(intervalId);
// window.clearInterval(intervalId); doesn't work to
lecture = false;
}else{
setInterval(ma_fonction, 1500);
// window.setInterval(ma_fonction, 1500); doesn't work to
lecture = true;
}
});
.mes_elements {
padding:1em;
background:blue;
margin: 1em;
}
<div class="ma_div">
<div class="mes_elements"></div>
<div class="mes_elements"></div>
<div class="mes_elements"></div>
</div>
解决方案
在您的代码中
}else{
setInterval(ma_fonction, 1500);
// window.setInterval(ma_fonction, 1500); doesn't work to
lecture = true;
}
您没有设置intervalId
为新的 setTimeout,因此您只能清除第一个,然后清除一个空变量。
将其更改为
}else{
intervalId = setInterval(ma_fonction, 1500);
// window.setInterval(ma_fonction, 1500); doesn't work to
lecture = true;
}
推荐阅读
- android - 带有字符串Android的可绘制资源文件
- cypress - Cypress - 无法在 chrome/Firefox 上运行 cypress runner,但能够在我的工作笔记本电脑上运行
- php - 如何只为 100 个 laravel Web 服务器 php-fpm 进程创建一个 websocket 客户端连接?
- jquery - Shopify 价格变化方程
- node.js - 如何使用变量来实现updateOne的$set操作路径?
- linux - linux(ubuntu)或git中的文件路径中的...是什么意思
- azure - Azure 管道。从资源仓库运行脚本
- vb.net - 防止用户在标签页之间导航
- stripe-payments - 用于移动应用支付的 Shopify 条带集成
- django - 返回到formwizard中的上一步时如何保存文件或删除旧文件