如何逆转标记相互叠加的顺序?

时间:2012-11-05 17:09:08

标签: javascript google-maps google-maps-markers

我正在绘制代表地图上商店的标记。

对于每个单击的标记,只有一个全局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,包括分页。

你能说出造成这个问题的原因吗?

1 个答案:

答案 0 :(得分:1)

尝试

for (i=limit-1;i>=0;i--)
像评论中建议的那样。您也需要在将功能附加到标记时更改线条。当您将标记推送到数组时,它会累积但您将函数附加到不存在的元素。使用另一个变量并在循环中递增:

c++

这一行

google.maps.event.addListener(markersArray[i],.. ... ...
当您将循环更改为递减i并尝试markersArray [i]时,它必须给出错误,因为元素i尚未在数组中。所以创建一个c变量并使用它,就像我写的那样,并改变行使用c而不是i。