UI の遅延については、「setTimeout」と組み合わせて「clearTimeout」を使用することをお勧めします。「setTimeout」を呼び出すと、通常は無視される ID が返されます。ただし、ID を保存すると、次に「setTimeout」を呼び出そうとしているときに、以前の「setTimeout」を (呼び出したことがないかのように) キャンセルできます。
あなたのケースで起こっていると私が想定しているのは次のとおりです。
(mouse move triggers callback)
setTimeout (1st)
(mouse move triggers callback)
setTimeout (2nd)
...
callback from 1st setTimeout is called
callback from 2nd setTimeout is called
...
ただし、clearTimeout を使用すると、次のようになります。
(mouse move triggers callback)
setTimeout (1st)
(mouse move triggers callback)
clearTimeout (1st)
setTimeout (2nd)
...
callback from last setTimeout is called
指定した JavaScript コードを更新するには:
var delayedSetLocationId = -1;
...
map.events.register("moveend", map, function() {
if (delayedSetLocationId >= 0) {
clearTimeout(delayedSetLocationId);
}
delayedSetLocationId = setTimeout(SetLocation, 5000);
});
...
function SetLocation(...) {
delayedSetLocationId = -1; // setTimeout fired, we can't cancel it now :)
...
}