【问题标题】:google map - close infowindow when click on map谷歌地图 - 单击地图时关闭信息窗口
【发布时间】:2014-06-02 14:21:50
【问题描述】:

我正在为我的 rails 应用程序中的 infowindows 关闭操作而苦苦挣扎。

我的js:

<script type="text/javascript">

  $(document).ready(function(){
    var raw_markers = <%=raw @hash.to_json %>;

    function createSidebarLi(json){
      return json.sidebar;
      //return ("<li>" + json.titre + ' ' + json.address + "</li>");
    };

    function bindLiToMarker($li, marker){
      $li.on('click', function(){
        handler.getMap().setZoom(14);
        marker.setMap(handler.getMap()); //because clusterer removes map property from marker
        marker.panTo();
        google.maps.event.trigger(marker.getServiceObject(), 'click');
      });
    };

    function bindLiToMarkerMouseOver($li, marker){
      $li.on('mouseover', function(){
        handler.getMap().setZoom(14);
        marker.setMap(handler.getMap()); //because clusterer removes map property from marker
        marker.panTo();
        google.maps.event.trigger(marker.getServiceObject(), 'click');
        //marker.serviceObject.setIcon("/assets/marker_sprite.png");
      });
    };

    function createSidebar(json_array){
      _.each(json_array, function(json){
        var $li = $( createSidebarLi(json) );
        $li.appendTo('#markers_list');
        bindLiToMarker($li, json.marker);
        bindLiToMarkerMouseOver($li, json.marker);
      });
    };

    //handler = Gmaps.build('Google', { builders: { Marker: InfoBoxBuilder} });
    handler = Gmaps.build('Google');
    handler.buildMap({ internal: {id: 'map'}}, function(){

      var markers = handler.addMarkers(raw_markers);

      _.each(raw_markers, function(json, index){
        var marker = markers[index];
        json.marker = marker;
        //google.maps.event.addListener(marker.getServiceObject(), 'mouseover', function(){
          //google.maps.event.trigger(marker.getServiceObject(), 'click');
        //});
      });

      google.maps.event.addListener(map, "click", function(){
        closeInfoWindow();
      });


      createSidebar(raw_markers);
      handler.bounds.extendWith(markers);
      handler.fitMapToBounds();
    });

  });

</script>

如果用户点击地图,我会调用 gmap 事件来关闭它们,但它不起作用。 我想我必须改变我打电话的地方,但我不确定,我到处都试过了。

有人有想法吗?

ps:我用的是Gmaps4rails,但是一般跟js没有关系。

【问题讨论】:

  • 我在您的代码中没有看到名为 closeInfoWindow 的函数。
  • google.maps.event.addListener(map, "click", function(){ closeInfoWindow(); });在脚本的末尾
  • OK 所以它的作用是将函数与地图的点击事件联系起来。该函数调用closeInfoWindow。但是我在任何地方都没有看到这个定义。
  • this: //google.maps.event.addListener(marker.getServiceObject(), 'mouseover', function(){ //google.maps.event.trigger(marker.getServiceObject(), '点击'); //});效果很好,也没有定义。我应该在哪里定义它?感谢您的帮助。
  • 也不确定您的信息窗口在哪里打开。也许this post 可以帮忙:

标签: javascript google-maps ruby-on-rails-4 gmaps4rails


【解决方案1】:

声明函数:

function closeInfoWindow(handler){
  if(handler.currentInfowindow()) {
    handler.currentInfowindow().close();
  }
}

然后调用它:

closeInfoWindow(handler);

【讨论】:

  • 感谢您的帮助。我认为我的听众也不工作。 google.maps.event.addListener(Gmaps.map.serviceObject, '点击', function(){ closeInfoWindow(handler); });对吗?
  • 地图对象可以通过handler.getMap()访问,请阅读文档
猜你喜欢
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
相关资源
最近更新 更多