javascript - 在用户交互上使用 setTimeout,但只执行一次
问题描述
我有一个应该按以下方式工作的按钮:
当用户按下这个按钮时,setTimeout
被调用等待几秒钟,然后执行一个函数。
简化,代码如下,onButtonClick
当用户按下按钮时调用were:
function onButtonClick() {
// executes some trivial things
setTimeout(foo, 3000);
}
function foo() {
// do something
}
这是可行的,但是,允许(甚至应该)用户多次单击该按钮。无意中, foo 将在等待 3 秒后被执行多次。相反,我只希望foo
在最后一次单击按钮后 3 秒执行。
我怎样才能实现这种行为?
解决方案
用于clearTimeout
取消setTimeout
。
这样,每当用户再次单击该按钮时,最后一次超时就会被取消并开始新的超时。
let timeout;
function onButtonClick() {
// executes some trivial things
clearTimeout(timeout);
timeout = setTimeout(foo, 3000);
}
function foo() {
console.log('foo');
}
<button onclick="onButtonClick()">click me</button>
推荐阅读
- excel-formula - 计算通过匹配创建的范围内的文本字符串
- c# - 如何固定向右和向左移动?
- java - Mandelbrot 集的可视化表示
- javascript - 如何使用 chart.js 偏移 x 和 y 轴网格点和标签?
- python - 如何删除“baca”或从 html 中读取?
- javascript - 返回一个空数组而不是 null
- canvas - 在带有画布的框架中使用 grid.columnconfigure
- javascript - 在单独的文件中指定路线时无法找到路线
- c# - AzureServiceTokenProvider 异常:尝试使用托管服务标识获取令牌。发送请求时出错
- google-sheets - 将 2 列转换为 1 行,Google 表格