我试着在eg之后做一个页面去到起始页。10秒不活动(用户未在任何地方单击)。其余部分我使用jQuery,但测试函数中的set/clear是纯javascript。
在我的frustation中,我最终得到了类似于这个函数的东西,我希望我可以在页面上的任何点击上调用它。计时器启动正常,但不会在单击时重置。如果函数在前10秒内被调用5次,那么将出现5个警报...没有clearTimeout...
function endAndStartTimer() {
window.clearTimeout(timer);
var timer;
//var millisecBeforeRedirect = 10000;
timer = window.setTimeout(function(){alert('Hello!');},10000);
}
有没有人有几行代码可以解决这个问题?-点击停止,重置并启动计时器。-当计时器到达时,例如。10秒做点什么。
发布于 2010-06-10 22:31:29
问题是timer
变量是局部变量,它的值在每次函数调用后都会丢失。
你需要持久化它,你可以将它放在函数之外,或者如果你不想将变量公开为全局变量,你可以将它存储在一个closure中,例如:
var endAndStartTimer = (function () {
var timer; // variable persisted here
return function () {
window.clearTimeout(timer);
//var millisecBeforeRedirect = 10000;
timer = window.setTimeout(function(){alert('Hello!');},10000);
};
})();
发布于 2010-06-10 22:30:50
这是因为定时器是函数的局部变量。
尝试在函数外部创建它。
发布于 2017-08-01 05:45:26
在react中使用它的一种方法:
class Timeout extends Component {
constructor(props){
super(props)
this.state = {
timeout: null
}
}
userTimeout(){
const { timeout } = this.state;
clearTimeout(timeout);
this.setState({
timeout: setTimeout(() => {this.callAPI()}, 250)
})
}
}
例如,如果你想只在用户停止输入之后调用API,这很有帮助。可以通过onKeyUp将userTimeout函数绑定到输入。
https://stackoverflow.com/questions/3015319
复制相似问题