【问题标题】:GMaps V3 InfoWindow - disable the close "x" buttonMaps V3 InfoWindow - 禁用关闭“x”按钮
【发布时间】:2013-09-21 13:50:36
【问题描述】:

据我所知,在 GMaps API v2 中有一个 InfoWindow 对象的属性“按钮”,可以通过给定 InfoWindow 没有关闭按钮的方式定义它:

marker.openInfoWindowHtml("No Close Button",{buttons:{close:{show:4}}});

但上述内容不适用于 v3。有人知道怎么做吗?我读到了一个名为InfoBox 的替代InfoWindow 的实用程序,但它在过去2 年里一直没有开发。我目前使用的是最新的 3.13 版本的 Gmaps v3 API。

如果没有更好的解决方案,使用 jQuery 的解决方法是可以接受的。

【问题讨论】:

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


    【解决方案1】:

    你也可以通过css来实现。

    .gm-style-iw + div {display: none;}
    

    2019 年 1 月编辑
    正如@antmeehan 在评论中所说,

    Google 更改了 HTML,关闭按钮现在是按钮元素而不是 div

    所以隐藏“x”按钮的css代码现在是:

    .gm-style-iw + button {display: none;}
    

    【讨论】:

    • 为我工作,它似乎是最好和最简单的解决方案
    • 仍然受 Google 改变实现方式的影响 - 取决于信息窗口类保持不变,关闭按钮是紧随其后的下一个 div。但至少它很简单。
    • Google 更改了 HTML,关闭按钮现在是按钮元素而不是 div。
    • 谢谢。一个问题,你为什么在声明中使用+?它通过声明 .gm-style-iw button 而不带 + 符号来工作。实际上它应该是.gm-style-iw > button,因为如果您在框中有其他自定义按钮,它也会被隐藏。将其作为答案,供未来用户参考。
    • + 运算符将选择紧跟在 gm-style-iw 类元素之后的所有
    【解决方案2】:

    更新

    在谷歌地图上显示<div> 很简单:

    示例css:

    div.info {
        position: absolute;
        z-index: 999;
        width: 200px;
        height: 100px;
        display: none;
        background-color: #fff;
        border: 3px solid #ebebeb;
        padding: 10px;
    }
    

    标记中某处的info<div>

    <div id="myinfo" class="info"><p>I am a div on top of a google map .. </p></div>
    

    对 div 有一个简短的引用总是很高兴:

    var info = document.getElementById('myinfo');
    

    更棘手的部分,显示&lt;div&gt;,如何以及何时 - 在这里我只是为地图分配一个点击处理程序(在它创建之后)并在地图内的鼠标位置 XY 处显示信息&lt;div&gt;

    google.maps.event.addListener(map, 'click', function(args) {
      var x=args.pixel.x; //we clicked here
      var y=args.pixel.y;
    
      info.style.left=x+'px';
      info.style.top=y+'px';
      info.style.display='block';
    });
    

    您的收获是,每次点击时,&lt;div&gt; 信息都会在地图上跟随您。

    • 您将需要更多样式来满足您的需要,例如“看起来像一个信息框”,但这应该很容易找到,我不是图书管理员 :)
    • 也许稍后会用一些东西来关闭信息,但你一开始并不想要:)

    原答案

    你不能!在当前的 v3.13 InfoWindow options 中没有办法做到这一点。

    解决方法是禁用包含 X 的图像:

    <style>
    img[src="http://maps.gstatic.com/mapfiles/api-3/images/mapcnt3.png"] {
        display: none;
    }
    </style>
    

    但这绝不可取

    src="http://maps.gstatic.com/mapfiles/api-3/images/mapcnt3.png 正是信息窗口所指的今天。明天,或者一个月,或者一年,这个图像参考肯定会改变。如您所见,如果您搜索类似的“解决方案”,随着时间的推移而制定 - 比如this。今天都坏掉了,比如努力是没有意义的。

    我认为谷歌“拒绝”遵循隐藏关闭按钮的请求是非常好的逻辑。如果您不需要关闭按钮,那么您还需要 InfoWindow 做什么?当您最好在地图上显示&lt;div&gt; 时。

    【讨论】:

    • 您能否提示一下如何在地图上显示一个看起来像 InfoBox 的 &lt;div&gt;
    • "如果您不需要关闭按钮,您还需要 InfoWindow 做什么?" - 你可以用 mouseout 事件关闭 infoWindow...
    【解决方案3】:

    如果使用 jquery 只需添加这个

    $(".gm-style-iw").next("div").hide();
    

    【讨论】:

    • 你可以用纯 CSS 做到这一点,只需使用 + 符号来获取下一个兄弟:.gm-style-iw + div { display: none; }
    【解决方案4】:

    要扩展 Louis Moore 的回答,您还可以在移除关闭按钮后将文本居中:

    .gm-style-iw + div {display: none;}
    .gm-style-iw {text-align:center;}
    

    不居中:

    带居中:

    【讨论】:

    • 这确实是迄今为止正确且最有效的答案。但老实说,为什么谷歌不支持隐藏它。
    【解决方案5】:

    感谢 Tushar,但您还需要将此代码放入事件处理程序中

    google.maps.event.addListener(infowindow, 'domready', function(){
        $(".gm-style-iw").next("div").hide();
    });
        

    【讨论】:

      【解决方案6】:

      我使用了 Tushar Gaurav 给出的答案,但将其扩展了一点......

      $(".gm-style-iw:contains(" + infoText + ")").css("left", function() {
          return ($(this).parent().width() - $(this).width()) / 2;
      }).next("div").remove();
      

      这将从带有 infoText 文本的信息窗口中删除 X,然后在删除关闭按钮后将文本居中,因为它偏离中心。

      只是为像我一样偶然发现此页面的其他人添加此内容。

      【讨论】:

      • 我喜欢这个答案,因为它允许更改特定的信息窗口,而不仅仅是全部。由于未知原因,文本没有真正居中,但可以使用 css: text-align: center
      【解决方案7】:
      closeBoxURL: ""
      

      如前所述,不适用于InfoWIndow。这是InfoBox 上的一个选项。

      例如,您可以使用此 CSS 解决方法来删除 X 和周围的可点击按钮:

      .gm-style-iw + div {
        display: none;
      }
      

      正如 davidkonrad 所说。这是今天的代码解决方法。它可能会改变。

      【讨论】:

        【解决方案8】:

        应该是.gm-style-iw &gt; button 以避免我们可能在框中也隐藏的其他自定义按钮:

        .gm-style-iw > button {
          display: none !important;
        }
        

        【讨论】:

        • 非常感谢,拯救我的一天。 :)
        【解决方案9】:

        我自己的方式(没有 Jquery)并重新对齐到 infoWindow 的中心:

        var content = document.querySelector('.gm-style-iw');
        content.parentNode.removeChild(content.nextElementSibling);
        content.style.setProperty('width', 'auto', 'important');
        content.style.setProperty('right', content.style.left, 'important');
        content.style.setProperty('text-align', 'center', 'important');
        

        【讨论】:

          【解决方案10】:

          这行得通

          .gm-style-iw > button {display: none !important;}
          

          【讨论】:

            【解决方案11】:

            我的解决方案:

                        google.maps.event.addListener(marker, 'click', function() {
            
                        var wnd = new google.maps.InfoWindow({
                            content: "<table id='viewObject' >...</table>"
                        });
            
                        google.maps.event.addListener(wnd, 'domready', function(){
            
                            $("#viewObject").parent().parent().next().remove();
                        });
            
                        wnd.open(map, marker);
                    });
            

            【讨论】:

            • 谢谢,如果您只想删除某些信息窗口的 x,它可以工作
            【解决方案12】:
            =============  HTML  ==============
            <agm-map #gm [latitude]="lat" [longitude]="lng" #AgmMap [fitBounds]="true">
             <agm-marker
                      (mouseOver)="onMouseOver(infoWindow, gm)"
                      (mouseOut)="onMouseOut(infoWindow, gm)"
                    >
            
                     <div id="test">
                        <agm-info-window #infoWindow></agm-info-window>
                      </div>
                    </agm-marker>
                  </agm-map>
            
            =============  TS  ==============
            
            onMouseOver(infoWindow, gm) {
            console.log(infoWindow);
            if (gm.lastOpen != null) {
             gm.lastOpen.close();
            }
            gm.lastOpen = infoWindow;
            infoWindow.open();
            setTimeout(() => {
              var x = document.getElementsByClassName('gm-ui-hover-effect')[0].remove();
            }, 10);
            }
            onMouseOut(infoWindow, gm) {
            gm.lastOpen = infoWindow;
            // infoWindow.close();
            

            }

            【讨论】:

              【解决方案13】:

              你可以使用它。这不会隐藏其他图像,如缩放控制、平移控制等。 在信息窗口的 dom 准备就绪上,您可以使用它。

              google.maps.event.addListener(infoWindow, 'domready', function () {
              
                    document.querySelector(".gm-style-iw").nextElementSibling.style.display = "none";
              });
              

              【讨论】:

                【解决方案14】:

                我在这里找不到正确的答案,所以我自己修复了它。它会很好用。

                google.maps.event.addListener(infowindow, 'domready', function(){
                      $(".gm-style-iw").parent().find("button").removeAttr("style").hide();
                });
                

                【讨论】:

                  【解决方案15】:

                  .gm-style-iw + 按钮 {display: none !important;}

                  【讨论】:

                  【解决方案16】:

                  即使在加载 DOM 后调用代码时,我也无法获得任何 $(".gm-style-iw").next("div").hide(); 答案,因为在调用代码和创建信息窗口之间存在延迟。我所做的是创建一个间隔,直到它找到信息窗口并删除“X”元素。如果有更好的方法请告诉我。

                  var removeCloseButton = setInterval(
                      function()
                      {
                          if ($(".gm-style-iw").length)
                          {
                              $(".gm-style-iw").next("div").remove();
                              clearInterval(removeCloseButton);
                          }
                      },
                      10
                  );
                  

                  【讨论】:

                    【解决方案17】:

                    使用弓箭手方法我需要做的

                    $(".gm-style-iw").css("left", function() { //remove close and recenter
                      return ($(this).parent().width() - $(this).find(">:first-child").width()) / 2;
                    }).next("div").remove();
                    

                    【讨论】:

                      【解决方案18】:
                      google.maps.event.addListener(infowindow, 'domready', function() {
                      
                          var iwOuter = jQuery('.gm-style-iw');
                      
                          // Reference to the div that groups the close button elements.
                          var iwCloseBtn = iwOuter.next();
                      
                          // Apply the desired effect to the close button
                          iwCloseBtn.remove()
                      });
                      

                      由于没有通过 API 参数隐藏它的选项,您必须通过定位内容窗口来找到元素并将其删除。

                      希望这会有所帮助:)

                      【讨论】:

                        【解决方案19】:

                        Anno domini 2021 这对我来说效果更好

                        button.gm-ui-hover-effect {
                          display: none !important;
                        }
                        

                        【讨论】:

                          【解决方案20】:

                          在 jQuery 的 gmap3 插件中可以使用

                          google.maps.event.addListener($('#map').gmap3({get:{name:"infowindow"}}), 'domready', function(){
                              $(".gm-style-iw").next("div").remove();
                          });
                          

                          【讨论】:

                            【解决方案21】:

                            2021 年 5 月:在您的 CSS 中添加:

                            button.gm-ui-hover-effect {
                               visibility: hidden;
                            }
                            

                            这与 Maps API v3.43 完美配合

                            【讨论】:

                              【解决方案22】:

                              检查它 - 它是一个带有 close 类的 div - 你可以使用 CSS 定位它并将其设置为 display: none;

                              【讨论】:

                                【解决方案23】:

                                你可以只使用选项

                                closeBoxURL : ""

                                http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobox/docs/reference.html

                                来自 Google 文档

                                closeBoxURL | string | 代表关闭框的图像的 URL。注意:默认为 Google 标准关闭框的 URL。放 如果不需要关闭框,则将此属性设置为 ""。

                                例子

                                   var infowindow = new google.maps.InfoWindow({
                                                          closeBoxURL: "",
                                                          closeBoxMargin : ""
                                
                                                        });
                                

                                【讨论】:

                                • Err,刚刚准备好上面复杂的答案。不知道它是如何被标记为正确的。这是简单而正确的答案!不错!
                                • 我和你做的完全一样...“我刚刚读过的WTF”是我最接近的想法...遗憾的是,上面的用户“nan”也正确回答了,但被正确的投票否决了回答。我对他投了赞成票,并在答案中添加了我自己的香料。
                                • infowindow != infobox
                                • 有趣的事情,如果你用谷歌搜索“信息框关闭按钮隐藏”,它会带你到这个页面,这是唯一有效的解决方案,哈哈
                                • 对我也不起作用。我认为它不适用于 3.20 版
                                【解决方案24】:

                                您可以将信息窗口的“closeBoxURL”属性设置为“”,它会使按钮消失。

                                var infowindow = new google.maps.InfoWindow({
                                    content: contentString,
                                    closeBoxURL: ""
                                });
                                

                                【讨论】:

                                猜你喜欢
                                • 2013-09-26
                                • 2012-01-06
                                • 2011-01-03
                                • 2011-10-10
                                • 1970-01-01
                                • 1970-01-01
                                • 2011-02-11
                                • 1970-01-01
                                • 2019-04-15
                                相关资源
                                最近更新 更多