为什么无法在此设置中清除超时?如何弥补()停止运行延迟的动作?
var active = false;
var delay;
window.addEventListener("mousedown", down, false);
window.addEventListener("mouseup", up, false);
window.addEventListener("mousemove", move, false);
function down(e) {
active = true;
console.log("down")
window.scrollTo(0,document.body.scrollHeight);
}
function up(e) {
active = false;
clearTimeout(delay); //expecting this to clear delay
console.log("up")
window.scrollTo(0,document.body.scrollHeight);
}
function move(e) {
if (active) {
delay = setTimeout(function() {
console.log("move")
window.scrollTo(0,document.body.scrollHeight);
}, 50);
}
}
期望在鼠标向上清除延迟,但仍会执行。
您在每次动作中都保持超时。它不会替代最后一个...
您的代码基本上是这个
delay = setTimeout(function() { } <-- will run
delay = setTimeout(function() { } <-- will run
delay = setTimeout(function() { } <-- will run
delay = setTimeout(function() { } <-- will run
delay = setTimeout(function() { } <-- will run
delay = setTimeout(function() { } <-- will run
delay = setTimeout(function() { } <-- cancels this one
window.clearTimeout(delay)
因此您需要先删除它,然后再创建一个新的>]
if (active) { if (delay) window.clearTimeout(delay) delay = setTimeout(function() { console.log("move") window.scrollTo(0,document.body.scrollHeight); }, 50); }
如果您需要移动不止一次射击,则需要查看节流脚本。