javascript - 清空数组并清除Javascript中的所有间隔
问题描述
我正在尝试清空或重置数组,如下所示。我有两个<li>
,每个都设置为 0。一旦第一个<li>
达到 5,我希望它停止递增,一旦第二个<li>
达到 10,我也希望它停止递增,这是通过使用 setInterval 函数完成的,每个函数都有自己的变量动态名称intervals[number] = seInterval()
.
默认情况下,我想调用 get_default() 函数,以便它开始递增。正如您在下面看到的,一旦第二个<li>
完成,我想提醒intervals
数组中的值。起初,它给我“1,2”,然后在第二次点击时,“6,7”,然后在第三次点击“9,10”等等。
我的问题是,为什么它没有给我一个值,"0,1"
因为这些是我传递的值,get_result(0); get_result(1);
并且一旦用户单击重置按钮,是否有正确的方法来清除或重置正在运行的所有间隔?
var intervals = [];
function get_result(number) {
clearInterval(intervals[number]);
intervals[number] = setInterval(function() {
var total_count = parseInt($('ul li:eq(' + number + ')').html());
var increment = total_count + 1;
$('ul li:eq(' + number + ')').html(increment);
if (number == 0 && increment == 5) {
clearInterval(intervals[number]);
}
if (number == 1 && increment == 10) {
clearInterval(intervals[number]);
console.log(intervals);
}
}, 1000);
}
//Default
function get_default() {
get_result(0);
get_result(1);
}
//Run on default
get_default();
$('input').click(function() {
//Reset
intervals = [];
$('li').html(0);
get_default();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>0</li>
<li>0</li>
</ul>
<input type="button" value="Reset">
解决方案
根据MDN setTimeout 返回一个数值。
返回的 intervalID 是一个数字的非零值,用于标识调用 setInterval() 创建的计时器;可以将此值传递给 WindowOrWorkerGlobalScope.clearInterval() 以取消超时。
在运行代码片段时,我们看到 setTimeout 的 intervalID 从数组中注销。
在我的代码片段中,我已将区间数据类型更改为对象,这样我就可以将 get_result 参数存储为键,将区间 ID 存储为值。
希望这会帮助你。
var intervals = {};
function get_result(number) {
clearInterval(intervals[number]);
intervals[number] = setInterval(function() {
var total_count = parseInt($('ul li:eq(' + number + ')').html());
var increment = total_count + 1;
$('ul li:eq(' + number + ')').html(increment);
if (number == 0 && increment == 5) {
clearInterval(intervals[number]);
}
if (number == 1 && increment == 10) {
clearInterval(intervals[number]);
console.log(intervals);
}
}, 1000);
}
//Default
function get_default() {
get_result(0);
get_result(1);
}
//Run on default
get_default();
$('input').click(function() {
//Reset
intervals = {};
$('li').html(0);
get_default();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>0</li>
<li>0</li>
</ul>
<input type="button" value="Reset">
推荐阅读
- xml - 是否可以找到 XPath 选择器来适应多种场景?
- html - 如何降低背景混合模式的不透明度
- c# - .NET 5.0 使用 JWT 和 OpenId 授权
- java - 当我运行 Junit 测试时
- php - PHP MYSQL - 反多账户
- amazon-web-services - 在生成 AWS 预签名 URL 后添加 Content-Disposition
- lua - tonumber 返回 nil,我找不到解决方案
- php - 创建一个包含电子邮件的数组
- latex - 文章在使用 LaTeX 时被剪切。关于布局
- css - 悬停时将“查看篮子”按钮文本颜色更改为白色(带有 Woocommerce 的 Wordpress)