考虑以下C#问题:Countdown timer increase on interaction?
我需要Java的等效语言。即,以下内容:
我需要在一段时间T之后调用一个回调,但是如果在回调执行之前发生了用户交互,那么这个时间T必须增加X。这是如何使用Javascript建模的?
我有一个前进页面按钮,单击该按钮会将页面增加1。增加页面会导致大量计算的发生,因此最好是在一段时间后才切换页面,以使垃圾邮件用户页面按钮不会使程序性能提高。进入垃圾箱。
答案 0 :(得分:1)
您可以使用反跳功能。它设置一个计时器,如果在计时器到期之前发生交互,它将删除旧计时器并创建一个新计时器,从而有效地重置时间。示例:
function debounce(fn, delay) {
let timerId;
return function (...args) {
if (timerId)
clearTimeout(timerId);
timerId = setTimeout(() => {
fn(...args);
timerId = null;
}, delay);
}
}
答案 1 :(得分:1)
您可以使用超时:https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout
document.getElementById("spamMe").onclick = doLongAction;
var canDoLongAction = true;
var timeout;
function doLongAction() {
if (canDoLongAction) {
// prevent relaunch of action
canDoLongAction = false
// the action will become available in 2sec
timeout = window.setTimeout(
() => {canDoLongAction = true},
2000
)
// you do your long action
alert("hey")
} else {
// if clicked while the timeout is going reset it
window.clearTimeout(timeout);
timeout = window.setTimeout(
() => {canDoLongAction = true},
2000
)
}
}
<button id="spamMe">spam me!!</button>
在此示例中,按钮一直处于阻塞状态,直到您停止单击2秒钟为止
答案 2 :(得分:1)
如果我理解正确,您可以清除超时并重新设置。
clearTimeout(timer);
timer = setTimeout(function(){}, 1000);
我用一个例子做了一个快速的代码笔。希望对您有所帮助:https://codepen.io/daniti/pen/gjePdo