我正在创建一个地图,根据边界框和缩放级别加载和销毁标记。我遇到了一个真正的问题,无法正确地删除标记,有时似乎对某些情况起作用。
我有一个包含标记信息的对象,该对象还包含Google地图标记对象。我的代码检测是否应该根据边界框或缩放级别删除市场。我将标记对象设置为“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 删除标记的代码位于底部。
我有一个包含标记信息的对象,该对象还包含Google地图标记对象。我的代码检测是否应该根据边界框或缩放级别删除市场。我将标记对象设置为“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);
};
我在控制台中添加了更多的调试信息,进入地图上只有2个标记的简单区域 http://www.trailforks.com/map/test.php?lat=49.43210641783767&lon=-123.49878636730955&z=14
我可以看到已经创建了标记,然后移动地图一点点,发现标记没有重新创建,因为它们在标记对象中被检测到了。然后我移动视口,使其中一个标记从屏幕上消失,我可以看到标记被删除,并且标记对象的长度更新了。但是如果我将地图平移回标记上,标记仍然在地图上。
data[i]
对象设置为null
? - dda