javascript - 如何颠倒标记相互重叠的顺序?

标签 javascript google-maps google-maps-markers

我正在绘制代表 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/

相关文章:

javascript - 使用jquery在div中显示加载图标

javascript - CoDrops 下拉菜单 onChange 事件不起作用

javascript - 谷歌地图 API v3 偏移量

javascript - 在谷歌地图 API v3 的循环中添加标记监听器?

ios - GoogleMaps iOS SDK 1.5 版无响应

javascript - 在 ReactJS 中每秒更新一次时钟元素

javascript - nodejs mongoose 删除命中错误 : Can't set headers after they are sent

android - 谷歌地图返回 nullpointerexception 谷歌地图 Android V2

android - 想要检索 SQlite 数据并将其设置为映射标记[ForceClose]

ios - 如何在特定持续时间内将 Google map iOS (Swift) 中的标记从坐标 A 动画到 B