我正在创建一个加载地图
我有一个包含标记信息的对象,它也包含google maps标记对象。我的代码检测是否应根据边界框或缩放级别删除市场。我将marker对象设置为“setMap(null);”使用firebug,我可以看到它被设置了,然后我完全删除了父对象,并且对象数据长度得到了正确更新。
当一个标记被认为删除时,我将其输出到firebug控制台,似乎正在工作,并且我可以看到该标记没有从ajax调用中重新装箱,以便在边界框更改中使用标记。
然而,如果我放大地图,我有时会看到标记正在被删除,如果我放大,然后按住鼠标向后平移。或者有时,如果我第一次缩小,标记将全部删除,但如果我再次放大然后缩小,它们不会被删除。
我的代码逻辑一定出了问题,我被难住了。
您可以查看http://www.trailforks.com/map/test.php?lat=49.352247
删除标记的代码位于底部
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);
};
我在控制台中添加了更多的调试,转到地图上只有2个标记的简单区域http://www.trailforks.com/map/test.php?lat=49.43210641783767
我可以看到创建的标记,然后稍微移动地图,可以看到标记没有重新创建,因为它们是在标记对象中检测到的。然后移动视口,使其中一个标记离开屏幕,我可以看到标记被删除,标记对象长度更新。但如果我把地图移回到地图上,标记仍然在地图上。
而不是执行以下操作:
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
将其更改为:
编辑(评论后):
为了防止事件处理程序的多个实例同时发生,可以使用全局变量,如下所示:
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
这应该涵盖这两种情况。现在,对于两个不同的事件侦听器,AJAX调用可能会发生冲突,您可能会在第一个调用完成之前触发第二个调用。
我在类似的问题上挣扎了很长时间,直到我意识到map标记的setMap-method是异步的。当您调用它并立即删除对该标记对象的任何引用时,浏览器的垃圾收集器会介入并从内存中清理它,从而阻止实际的删除操作发生。
尝试一下,只需用拼接调用注释掉该行,看看是否有帮助。如果确实有帮助,您应该考虑延迟删除对象,或者存储对标记对象的引用,直到它真正被删除。如何检测它是否真的被删除?我不知道。
我希望这有帮助!
接口说明 该接口已经废弃,请使用【单体化、标绘、压平 -> GEOJSON上传】接口 如果出现标记有误或者不想在对某个位置进行标记,可以调用该接口来删除标记的位置 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/marker/1.0.0/del 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 id s
Quickly removes tag, found by “Match Tag Pair” from current caret position, and adjusts indentation. 快速删除标签,并调整缩进。这里的标签是在插入符所在位置由 匹配标签 功能查找的标签。 <body> <div |class="wrapper"> <h1>Title</h1>
我使用spring Boot2、jpa和Hibernate。Db是后置,我尝试删除一个带有子级的对象 如果我删除了Samplings,Samplings、testsamplings和Compressions也应该被删除。 从sample_letter=?的示例中删除和sampling_id=?和sampling_year=? 2018-10-03 22:21:05.832错误14511--[nio
本文向大家介绍删除“ highcharts.com”徽标,包括了删除“ highcharts.com”徽标的使用技巧和注意事项,需要的朋友参考一下 示例 默认情况下,Highchart在图表的右下角放置一个Credits标签。 可以使用credits图表设置中的选项将其删除。 要么 将删除highcharts.com徽标。
Google发布了带有BottomNavigationView的新支持库v25 有什么方法可以去除物品标签吗?
若要删除标签,在tag命令指定 -d选项执行。 $ git tag -d <tagname>