Can*_*aka 9 google-maps google-maps-api-3
我正在创建一个基于边界框和缩放级别加载和销毁标记的地图.我有一个真正的问题,正确删除标记,它似乎有时适用于某些情况.
我有一个包含标记信息的对象,它还包含谷歌地图标记对象.我的代码检测是否应根据边界框或缩放级别删除市场.我将标记对象设置为"setMap(null);" 并使用firebug我可以看到它被设置,然后我完全删除父对象,并正确更新对象数据长度.
当一个标记被删除时,我输出到firebug控制台,似乎正在工作,我可以看到标记没有从边界框更改上的标记的ajax调用中重新创建.
然而,如果我在地图上缩放,我有时会看到标记被移除,如果我缩小然后向后平移按住鼠标.或者,如果我第一次缩小,有时会删除所有标记,但如果我再次放大然后退出,则不会删除它们.
我必须对我的代码逻辑做错事,我很难过.
您可以查看http://www.trailforks.com/map/test.php?lat=49.352247&lon=-123.202413 的来源, JS是 http://www.trailforks.com/map/includes/map.js
删除标记的代码位于底部
function clearMarkerMemory(mapItem, i) {
google.maps.event.removeListener(mapItem.lis); // remove stored listener
mapper.data[i].obj.setMap(null); // remove marker
mapper.data.splice(i, 1);
console.log("removed marker "+mapItem.icon+":"+mapItem.nid+' '+mapItem.name);
};
Run Code Online (Sandbox Code Playgroud)
我在控制台中添加了一些调试,只用2个标记进入地图的简单区域http://www.trailforks.com/map/test.php?lat=49.43210641783767&lon=-123.49878636730955&z=14
我可以看到创建的标记,然后稍微移动地图,看到标记没有被重新创建,因为它们是在标记对象中检测到的.然后我移动视口,使其中一个标记离开屏幕,我可以看到标记被删除,标记对象长度更新.但是,如果我将地图平移回标记仍然在地图上.

而不是这样做:
google.maps.event.addListener(map, 'dragend', function() { refreshMarkers(); }); //refresh markers when user moves map
google.maps.event.addListener(map, 'zoom_changed', function() { refreshMarkers(); }); //refresh markers when user moves map
Run Code Online (Sandbox Code Playgroud)
将其更改为:
编辑,(评论后):
为了防止事件处理程序的多个实例同时发生,可以使用全局变量,如下所示:
google.maps.event.addListener(map, 'bounds_changed', function() {
if (processing) { // var processing is global
return;
}
processing = true;
refreshMarkers();
processing = false;
}); //refresh markers when user moves map
Run Code Online (Sandbox Code Playgroud)
这应该涵盖这两种情况。现在,使用两个不同的事件侦听器,AJAX 调用可能会发生冲突,并且您可能会在第一个调用完成之前触发第二个调用。
| 归档时间: |
|
| 查看次数: |
2770 次 |
| 最近记录: |