Javascript 用户交互时增加倒计时

Javascript 用户交互时增加倒计时,javascript,concurrency,Javascript,Concurrency,考虑一下这个C#问题: 我需要一个等价的Javascript。即: 问题 我需要在一段时间T之后调用回调,但是如果在执行回调之前发生了用户交互,那么这个时间T必须增加X。如何使用Javascript建模 背景(原因) 我有一个页面前进按钮,点击后页面会增加1。增加页面会导致一些繁重的计算,因此最好只在一个小时间段后切换页面,这样滥发页面按钮的用户就不会使程序运行良好。进入垃圾箱。您可以使用去盎司功能。它设置一个计时器,如果在计时器到期之前发生了一次交互,它将删除旧计时器并创建一个新计时器,从而有

考虑一下这个C#问题:

我需要一个等价的Javascript。即:

问题 我需要在一段时间T之后调用回调,但是如果在执行回调之前发生了用户交互,那么这个时间T必须增加X。如何使用Javascript建模

背景(原因)
我有一个页面前进按钮,点击后页面会增加1。增加页面会导致一些繁重的计算,因此最好只在一个小时间段后切换页面,这样滥发页面按钮的用户就不会使程序运行良好。进入垃圾箱。

您可以使用去盎司功能。它设置一个计时器,如果在计时器到期之前发生了一次交互,它将删除旧计时器并创建一个新计时器,从而有效地重置时间。例如:

功能去抖动(fn,延迟){
让时光流逝;
返回函数(…args){
if(timerId)
清除超时(timerId);
timerId=setTimeout(()=>{
fn(…args);
timerId=null;
},延误);
}

}

您可以使用去盎司功能。它设置一个计时器,如果在计时器到期之前发生了一次交互,它将删除旧计时器并创建一个新计时器,从而有效地重置时间。例如:

功能去抖动(fn,延迟){
让时光流逝;
返回函数(…args){
if(timerId)
清除超时(timerId);
timerId=setTimeout(()=>{
fn(…args);
timerId=null;
},延误);
}
}

您可以使用超时:

document.getElementById(“spamMe”).onclick=doLongAction;
var canDoLongAction=true;
var超时;
函数doLongAction(){
if(canDoLongAction){
//防止重新启动行动
canDoLongAction=false
//该操作将在2秒后可用
timeout=window.setTimeout(
()=>{candongAction=true},
2000
)
//你做你的长动作
警惕(“嘿”)
}否则{
//如果在超时进行时单击,请将其重置
clearTimeout(超时);
timeout=window.setTimeout(
()=>{candongAction=true},
2000
)
}
}
给我发垃圾邮件您可以使用超时:

document.getElementById(“spamMe”).onclick=doLongAction;
var canDoLongAction=true;
var超时;
函数doLongAction(){
if(canDoLongAction){
//防止重新启动行动
canDoLongAction=false
//该操作将在2秒后可用
timeout=window.setTimeout(
()=>{candongAction=true},
2000
)
//你做你的长动作
警惕(“嘿”)
}否则{
//如果在超时进行时单击,请将其重置
clearTimeout(超时);
timeout=window.setTimeout(
()=>{candongAction=true},
2000
)
}
}

给我发垃圾邮件如果我理解正确,您只需清除超时并重新设置即可

clearTimeout(timer);
timer = setTimeout(function(){}, 1000);

我用一个例子快速编写了一个代码笔。我希望它能有所帮助:

如果我理解正确,您只需清除超时并重新设置即可

clearTimeout(timer);
timer = setTimeout(function(){}, 1000);

我用一个例子快速编写了一个代码笔。我希望这能有所帮助:

增加的数字X是常数还是经过计算的?我可能只想将计时器重置为原始的T(因此,如果它从20ms开始,下降到15,我想将其重置为20)。换言之:是的,一个简单的计算发生了,增加的数字X是一个常数,或者它是以某种方式计算的?我可能只想将计时器重置为原始的T(因此,如果它从20ms开始,下降到15,我想将其重置为20)。换句话说:是的,一个微不足道的计算发生了