gpt4 book ai didi

jquery - clearInterval(timerId) 不起作用

转载 作者:行者123 更新时间:2023-12-01 01:13:34 26 4
gpt4 key购买 nike

我想在发生 mouseenter 事件时开始计数,然后在发生 mouseleave 事件时停止计数。但是,正如您在本示例的控制台中看到的,mouseleave 内的 clearInterval(timerId) 命令不起作用。

有什么问题吗?

var timerId;
clearInterval(timerId);

$("#demo").mouseenter(function() {
setTimeout(function() {
startcounting(timerId);
}, 2000)
});

$("#demo").mouseleave(function() {
clearInterval(timerId);
});

function startcounting(timerId) {
var number = 0;
timerId = setInterval(function() {
increment(timerId);
}, 100);

function increment(timerId) {
if (number >= 100) {
number = 0;
clearInterval(timerId);
} else {
number++;
console.log(number);
}
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="demo">demo</div>

最佳答案

问题是因为您的 startcounting()increment() 函数有一个名为 timerId 的参数,该参数隐藏了外部作用域中的同名变量 - 这是您需要的变量。

如果删除这些属性,代码将有效:

var timerId;
clearInterval(timerId);

$("#demo").mouseenter(function() {
setTimeout(function() {
startcounting(); // remove here
}, 2000)
});

$("#demo").mouseleave(function() {
clearInterval(timerId);
});

function startcounting() { // remove here
var number = 0;
timerId = setInterval(function() {
increment(timerId);
}, 100);

function increment() { // remove here
if (number >= 100) {
number = 0;
clearInterval(timerId);
} else {
number++;
console.log(number);
}
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="demo">demo</div>

关于jquery - clearInterval(timerId) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41017527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com