我正在绘制代表地图上商店的标记。
对于每个单击的标记,只有一个全局infoWindow显示,它在关闭之前单击的标记后立即显示。
在某些情况下,一些商店可能具有相同的地址,因此标记显示在彼此之上,而且只能看到顶部标记。
为了解决这个问题,我在infoWindow中添加了分页功能。
问题是顶部标记是列表中的最后一个,因此infoWindow显示最新商店的信息,分页显示“后退”按钮,而不是首先显示第一个商店和“下一个”按钮。
我试图像这个for (i=limit; i>0; i--)
那样颠倒“for”循环的顺序,但它不起作用。地图卡住就像运行一些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
,包括分页。
你能说出造成这个问题的原因吗?
答案 0 :(得分:1)
尝试
for (i=limit-1;i>=0;i--)
像评论中建议的那样。您也需要在将功能附加到标记时更改线条。当您将标记推送到数组时,它会累积但您将函数附加到不存在的元素。使用另一个变量并在循环中递增: c++
这一行
google.maps.event.addListener(markersArray[i],.. ... ...当您将循环更改为递减i并尝试markersArray [i]时,它必须给出错误,因为元素i尚未在数组中。所以创建一个c变量并使用它,就像我写的那样,并改变行使用c而不是i。