我正在绘制代表 map 上商店的标记。
有一个单一的全局信息窗口,它会在每个被点击的标记处出现,紧接着它会在前一个被点击的标记处关闭。
在某些情况下,几家商店可能有相同的地址,因此标记会出现在彼此的顶部,并且只能看到顶部标记。
为了解决这个问题,我在 infoWindow 中添加了分页。
问题是顶部标记是列表中的最后一个,因此信息窗口显示最新的商店信息并且分页显示“后退”按钮,而不是先显示第一家商店和“下一步”按钮.
我尝试像这样颠倒“for”循环的顺序 for (i=limit; i>0; i--)
但它不起作用。 map 卡住了,好像在运行一些 ajax 请求。
代码如下:
function drawShopsMarkers(){
var marker;
markersArray = [];
var i;
var limit = globalShopsArr.length;
for (i=0; i<limit; i++){
marker = new google.maps.Marker({
position: new google.maps.LatLng(globalShopsArr[i].shopLat, globalShopsArr[i].shopLng),
map: map,
title: globalShopsArr[i].shopTitle
});
markersArray.push(marker);
marker.setMap(map);
google.maps.event.addListener(markersArray[i], 'click', makeListener(i));
}
function makeListener(index) {
return function() {
globalInfowindow.disableAutoPan=true;
globalInfowindow.open(map,markersArray[index]);
CreateInfoWindowString(index);
globalInfowindow.setOptions({
content: globalContentString
});
}
}
}
CreateInfoWindowString()
函数只是填充 globalContentString
,包括分页。
你能说说是什么导致了这个问题吗?
最佳答案
尝试
for (i=limit-1;i>=0;i--)
就像评论中建议的那样。将函数附加到标记时也需要更改行。当您将标记推到数组时,它会累积,但您将函数附加到不存在的元素。使用另一个变量并在循环中递增它:
c++
这一行
google.maps.event.addListener(markersArray[i],.. ... ...当您将循环更改为递减 i 并尝试 markersArray[i] 时,它必须给出错误,因为元素 i 还不在数组中。因此,创建一个 c 变量并像我写的那样使用它,并将该行更改为使用 c 而不是 i。
关于javascript - 如何颠倒标记相互重叠的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13236923/