【问题标题】:gmaps.js trigger infoWindowgmaps.js 触发 infoWindow
【发布时间】:2014-01-29 06:55:16
【问题描述】:

我很难弄清楚如何使用 gmaps.js 触发指定的 infoWindow

我的地图初始化如下:

map = new GMaps({
    div: '#map-canvas'
});
renderMarkers();

我的 renderMarkers 函数基本上对 PHP 脚本执行 AJAX 调用,该脚本查询数据库并返回结果集,并返回一系列 addMarker 调用,如下所示:

LOOP THROUGH RESULT SET {

    map.addMarker({
        lat: marker.SiteLatitude, 
        lng: marker.SiteLongitude,
        infoWindow: {
           content: marker.contentHTML,
           closeclick: function(e) {
               $("#customer-details-container").hide();
           }
       },
       icon: marker.iconPath,
       id: marker.MyID
   })

}

当客户端使用 map.removeMarkers() 触发对基础数据库的更新时,我刷新/重新渲染标记,然后触发我的 renderMarkers() 函数。当标记在地图上重绘时,如果用户打开了 infoWindow,我想触发它​​打开。

我不确定如何根据特定 ID 触发 infoWindow。例如,假设标记是这样设置的:

    map.addMarker({
        lat: 102.325 
        lng: -67.524,
        infoWindow: {
           content: "<div>test!</div>"
           closeclick: function(e) {
               $("#customer-details-container").hide();
           }
       },
       icon: "image/marker.png",
       id: 1234
   })

我说我应该能够使用 ID=1234 定位它是否正确?例如:

google.maps.event.trigger(markers[1234], 'click');

??

我不确定使用 gmaps.js 执行此操作的具体语法

非常感谢任何帮助:D

【问题讨论】:

    标签: javascript google-maps google-maps-api-3 gmaps.js


    【解决方案1】:

    添加到 Gmaps.map 实例的每个标记都有自己的 InfoWindow 存储到标记对象中。我们需要该特定标记的数组索引键。地址按索引键右边的InfoWinow o 被打开。您可以通过执行以下操作打开 GMaps.js 特定标记:

    (map.markers[index].infoWindow).open(map.map,map.markers[index]);
    

    将 [index] 替换为您希望信息窗口打开的标记的索引。

    【讨论】:

    • 效果很好,但你能告诉我如何关闭除索引之外的所有其他信息窗口吗?
    • 嗨@AmitSingh,要关闭所有信息窗口,您可以循环所有信息窗口并调用'close()'函数。您始终可以在 ex 上添加自定义检查。索引...
    【解决方案2】:

    我说我应该能够使用 ID=1234 定位它是否正确?

    我不这么认为。文档非常不完整,在 gmaps.js 中我找不到任何具有通过属性访问标记的功能。

    但你可以扩展原型:

    GMaps.prototype.markerById=function(id){
      for(var m=0;m<this.markers.length;++m){
        if(this.markers[m].get('id')===id){
          return this.markers[m];
        }
      }
      return new google.maps.Marker();
    }
    

    用法:

    google.maps.event.trigger(map.markerById(12345), 'click');
    

    【讨论】:

    • 谢谢。完美运行。
    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2012-02-02
    • 2015-09-08
    相关资源
    最近更新 更多