我正在运行一个相对简单的函数(更新span
's innerHTML
) on mousemove
。该应用程序是一个Leaflet http://leaflet.cloudmade.com/地图。当鼠标移动时,缩放、平移和加载图块时会出现明显的滞后。我只需要更新span
每秒最多约10-20次。 (看here http://map.agent-orange.ca/对于有问题的页面;更新是针对右上角的 X/Z 指示器。)
推迟和/或延期的最佳方式是什么mousemove
事件调用?跳过更新就够了吗innerHTML
?我可以在超时后取消注册并重新注册该事件吗?
修改span的文本节点会比修改innerHTML效率高很多。
function mouseMoveAction(ev) {
span.firstChild.data = new Date.toString();
}
但是,如果文本节点不能满足要求,并且您需要在 mousemove 上使用 innerHTML,则可以在 mousemove 处理程序中使用阈值。
/* Keep CPUs to a minimum. */
var MOUSE_MOVE_THRESHOLD = 25,
lastMouseMoveTime = -1;
function mousemoveCallback(ev) {
var now = +new Date;
if(now - lastMouseMoveTime < MOUSE_MOVE_THRESHOLD)
return;
lastMouseMoveTime = now;
mouseMoveAction(ev);
}
避免使用 jQuery 等;它们不必要地使事情变得更慢并且增加了更多的复杂性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)