目前,我的Google地图(api v3)上有以下监听器事件:
google.maps.event.addListener(Map, 'center_changed', FixedMarkerInCenter);
google.maps.event.addListener(Map, 'zoom_changed', FixedMarkerInCenterZoom);
google.maps.event.addListener(Map, 'dragend', FindReverseGeocode });
Run Code Online (Sandbox Code Playgroud)
问题在于,“ dragend”事件触发了多次(至少四次),并且“ FindReverseGeocode”函数发生了多次。有人知道这个问题吗?
没错,这很烦人,但是..还不要感到绝望-您可以使用简单的JavaScript进行修复:
map.dragInProgress = false; //adding flag to already existing map object to keep DOM clean
google.maps.event.addListener(map, 'dragend', function() {
if(map.dragInProgress == false) { //only first shall pass
map.dragInProgress = true;
window.setTimeout(function() {
console.log('Note how you will see this console message only once.');
//cast your logic here
map.dragInProgress = false; //reset the flag for next drag
}, 1000);
}
});
Run Code Online (Sandbox Code Playgroud)
简而言之,这使您每秒仅接收一次dragend事件。确保您的脚本不会在逻辑中间死掉,否则首先是最后的拖动。您可以使用try / catch / finally来解决该问题。请享用!