【发布时间】:2015-09-12 22:15:08
【问题描述】:
我在看the events chapter in Eloquent Javascript,遇到如下代码。它应该每 250 毫秒显示一次用户鼠标的坐标。
function displayCoords(event) {
document.body.textContent =
"Mouse at " + event.pageX + ", " + event.pageY;
}
var scheduled = false, lastEvent;
addEventListener("mousemove", function(event) {
lastEvent = event;
if (!scheduled) {
scheduled = true;
setTimeout(function() {
scheduled = false;
displayCoords(lastEvent);
}, 250);
}
});
我不明白调度是如何工作的。我知道如果您设置timeOut,则处理程序将在设置的时间段后运行,但我不明白为什么在此示例中存在计划变量和条件语句来检查其布尔值。
如果没有变量和 if 语句,程序将无法按预期工作,它会毫无延迟地打印坐标。 这背后的逻辑是什么?
【问题讨论】:
-
逻辑关闭。
scheduled和条件是无用的,在这种情况下,除非你有一些其他功能可以将scheduledvar 设置为true并停止setTimeoutonmousemove。 -
我还以为它们没用,但是!在 Ori 的帮助下,我能够解决这个问题 - 见下文 由于 timeOut 设置为每 250 毫秒一次为 false,因此条件语句是一种阻止每 250 毫秒调用一次超时的方法。
-
好吧,我的逻辑错了。感谢您清除它。
-
是的,这不是问题。
标签: javascript dom-events mousemove