Javascript动态函数创建Google Maps Markers对象循环

标签 javascript google-maps-markers dynamic-allocation

简单地说,我试图为循环中的每个属性动态创建一个标记和相应的标签。标签将包含时间戳。

但是,我相当困惑于弄清楚如何让单击功能保持与其各自的标记的绑定(bind)。还有 infowindow 变量。

我尝试使用计数器并创建变量数组来引用每个函数。我还尝试过 eval 并在全局窗口中创建新变量

窗口[“foo”+计数器]

没有成功。对于我尝试过的所有变体,代码已损坏或导致所有触发器/信息窗口都绑定(bind)到同一属性。

任何帮助或指导将不胜感激。我认为我只是缺少一些理解变量/对象范围的深度。此基本代码会导致出现所有标记和最终标签(因为之前的标签被覆盖),如下所示。 image of current state

变量:

prop = string representing long,lat coordinates
obj[prop] = An ISOformat timestamp

其余代码取自marker Labels Google Maps API

    for (var prop in obj) {
        // skip loop if the property is from prototype
        if(!obj.hasOwnProperty(prop)) continue;


        var templocs = prop.split(",").map(Number);
        console.log(templocs[0]);
        var temppos = new google.maps.LatLng(templocs[0], templocs[1]);

        var mark = new google.maps.Marker({
            position:temppos,
            map: map,
            animation:google.maps.Animation.BOUNCE,

        });
        var infowindow = new google.maps.InfoWindow({
            content: "date taken: " + obj[prop],
            maxWidth: 200
        }); 

        mark.addListener('click', function() {
            infowindow.open(map, mark);
        });       
    }

最佳答案

    var cnt = 0;
    var infowindow = [];
    var mark = [];
    var bounds = new google.maps.LatLngBounds();

    for (var prop in obj) {
        // skip loop if the property is from prototype
        if(!obj.hasOwnProperty(prop)) continue;

        var templocs = prop.split(",").map(Number);
        console.log(templocs[0]);
        var temppos = new google.maps.LatLng(templocs[0], templocs[1]);

        infowindow[cnt] = new google.maps.InfoWindow({
            content: "date taken: " + obj[prop],
            maxWidth: 200
        });         


        mark[cnt] = new google.maps.Marker({
            position: temppos,
            map: map,
            animation:google.maps.Animation.BOUNCE,

        });


/*      mark[cnt].addListener('click', function() {
            infowindow[cnt].open(map, mark);
        });     */  

        google.maps.event.addListener(mark[cnt], 'click', (function(markerrr, cnt) {
          return function() {
            infowindow[cnt].open(map, mark[cnt]);
          }
        })(mark[cnt], cnt));
        bounds.extend(mark[cnt].getPosition());

        cnt++;
    }

已修复。这篇文章是this one的重复。

问题与关闭有关。

关于Javascript动态函数创建Google Maps Markers对象循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35378570/

相关文章:

javascript - 是否可以停止当前正在执行的 Javascript 代码?

asp.net - 检测 ASP.NET 中客户端 DOM 更改服务器端 : Is It Possible?

google-maps - 鼠标悬停时如何使谷歌地图标记变大?

android - 如何从网络加载图像作为android中的标记图标?

dynamic-allocation - 安全关键项目中动态分配的替代方法(C)

javascript - responseText 为空,但显示在控制台上?

javascript - 根据另一个对象中的属性向对象添加属性数组

android - 通过更改 Android 中的 Z-Index 将 Google map 标记置于最前面

c++ - 错误 C2512 : no appropriate default constructor available (not classes)

检查已分配内存的大小