【问题标题】:Closing any open info windows in google maps api v3关闭谷歌地图 api v3 中所有打开的信息窗口
【发布时间】:2011-02-27 08:20:02
【问题描述】:

正如标题所述,在给定事件中(对我来说,这恰好是在打开一个新的 google.maps.InfoWindow 时,我希望能够关闭任何其他当前打开的信息窗口。现在,我可以一次打开多个..但我一次只希望打开 1 个。

我正在动态创建信息窗口(即我不知道会提前生成多少个),所以在当前信息窗口的点击事件中(我希望所有其他打开的窗口都关闭)我没有引用任何其他打开的信息窗口,可以在其上调用close()。我想知道如何实现这一目标。我不是一个经验丰富的 JavaScript 程序员,所以我不知道我是否需要在这里使用反射或类似的东西。

最好的方法是将所有引用保存在某种集合中,然后遍历列表将它们全部关闭吗?

谢谢。

【问题讨论】:

    标签: javascript google-maps google-maps-api-3


    【解决方案1】:

    我遇到了同样的问题,并通过创建一个全局信息窗口来解决它。

    var infowindow = new google.maps.InfoWindow();
    

    然后我有一个函数可以在点击监听器上执行以下操作:

    function getInfoWindowEvent(marker) {
        infowindow.close()
        infowindow.setContent("This is where my HTML content goes.");
        infowindow.open(map, marker);
    }
    

    这实现了我认为您正在寻找的 b/c,现在地图上只有一个信息窗口,我只需关闭它,重新加载内容,然后为给定的标记再次打开它。

    【讨论】:

      【解决方案2】:

      拥有一个全局信息窗口就足够了,然后可以更改该信息窗口的位置和内容。

      var infowindow = new google.maps.InfoWindow();
      
      // Call this function to open an infowindow i.e. on click.
      function respondToClick(latlng) {
        infowindow.setOptions({
          position: latlng,
          content" "Hello, world"
        });
      }
      

      由于每次都使用相同的信息窗口,因此您可以保证只打开一个信息窗口,并且与创建然后销毁多个信息窗口相比,它使用的资源/内存更少。

      【讨论】:

        【解决方案3】:

        infowindow 是局部变量,窗口​​在 关闭()

        var latlng = new google.maps.LatLng(-34.397, 150.644); var infowindow
         = null;
        
         ...
        
         google.maps.event.addListener(marker, 'click', function() {
             if (infowindow) {
                 infowindow.close();
             }
             infowindow = new google.maps.InfoWindow();
             ... });
        ...
        

        参考号:Close all infowindows in Google Maps API v3

        【讨论】:

          【解决方案4】:

          我决定创建一个包含所有动态创建的信息框的数组。当您单击任何第一次移动阵列然后关闭所有打开时,仅打开您单击的一个。

          var allInfos = [];
          
          function closeInfos() {
                  for (i = 0; i < allInfos.length; i++) {
                      allInfos[i].close();
                  }
          }
          

          创建信息框后,您是否将其动态添加到数组中,如下所示:

          allInfos.push(infowindow);
          

          【讨论】:

            【解决方案5】:

            你只需要一行: $(".gm-style-iw").next().click();

            在信息窗口中有一个带有此类的 div,“gm-style-iw”。之后,是关闭按钮的 div。因此,此代码将单击地图中存在的每个信息窗口关闭按钮

            【讨论】:

            • 你应该解释为什么以及如何解决这个问题。详情请见here...
            • 在信息窗口中有一个带有此类的 div,“gm-style-iw”。之后,是关闭按钮的 div。因此,此代码将单击地图中存在的每个信息窗口关闭按钮。
            • 它有效,谢谢!并且无需创建大量变量
            【解决方案6】:

            我认为最好的方法是...拥有一个包含您打开的信息窗口的对象

            我有两个对象, infos 已创建所有 infowindows,markers 包含所有带有 infowindows 的标记 所以我只是执行这个循环 infowindow 对象并关闭所有 infowindows 的函数

            function CloseInfowindows() {
              for (var mkey in infos) {
                var mobj = markers[mkey];
                mobj.infowindow.close();
              }
            }
            

            【讨论】:

              猜你喜欢
              • 2013-10-04
              • 2023-03-10
              • 2013-12-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-05-18
              • 2013-02-22
              • 2013-05-16
              相关资源
              最近更新 更多