javascript - SetTimeout 多次调用函数如何避免它
问题描述
我有 2 个 setTimeout 函数,它调用 2 个不同的函数,但在某些情况下,从 setTimeout 调用一个函数多次发生,不知道如何解决这个问题,任何帮助将不胜感激。我使用此脚本在网页上查找用户空闲时间,并将空闲时间更新到我的数据库。
window.onmousemove = resetTimer('y');
window.onload = resetTimer('y');
window.onmousemove = resetTimer('y');
window.onmousedown = resetTimer('y');
window.onmouseup = resetTimer('y');
window.ontouchstart = resetTimer('y');
window.onclick = resetTimer('y');
window.onkeypress = resetTimer('y');
window.onscroll = resetTimer('y');
var t;
function resetTimer(v) {
clearTimeout(t);
if (v == 'y') {
t = setTimeout(Ytimepop, 4000);
}
if (v == 'z') {
t = setTimeout(Ztimepop, 5000);
}
}
function Ytimepop() {
// ajax code
resetTimer('z');
}
function Ztimepop() {
// ajax code
}
在窗口鼠标悬停和其他事件上,我调用了一个函数,该函数将调用 resetTimer('y') 并开始计算 Ytimepop 计时器,并且该函数被多次调用,Ztimepop 计时器也同样如此。
解决方案
你应该使用
var t;
window.onmouseover = function() {
resetTimer('y');
}
function resetTimer(v) {
clearTimeout(t);
// --- rest of your code
}
目前尚不清楚您要使用onmouseover
或onmousemove
推荐阅读
- google-apps-script - 停止自定义函数自动刷新/定期调用外部 API
- python - 类型错误模块对象不可调用python gtts
- flutter - 可滚动的 Listview 问题 - Flutter
- php - 如何保护 laravel 存储文件夹?
- python - How can you partition every value of a dictionary and change that value to the first output?
- python - Flask - Firebase 存储 - 图片上传
- javascript - 使用异步 node.js 进行 Twitter API 光标导航
- html - 如何使用动画使文本居中?
- java - Java.io.InputStream 类是表示字节输入流的所有类的超类。它如何读取带有字符的文件?
- node.js - 错误:找不到模块 'rxjs' - 创建 React 应用程序