【问题标题】:Disable click event on a transit bus stop icon禁用公共汽车站图标上的点击事件
【发布时间】:2015-06-15 16:15:34
【问题描述】:

如何在 Google 地图中禁用公交车图标上的点击事件?我有自己的标记来提供公交车站信息,用户可能会不小心点击公交车站而不是我的自定义标记,有时可能会有多个弹出框。见下图:

我在地图上使用这个代码:

// https://maps.googleapis.com/maps/api/js?key=XXXXXX&sensor=true&callback=initialize
var mapOptions = {
    center: new google.maps.LatLng(mapCenterLat, mapCenterLon),
    zoom: 9,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    mapTypeControl: false,
    panControl: true,  
    scaleControl: false,
    overviewMapControl: false,
    streetViewControl: false,
    navigationControl: true,
    navigationControlOptions: {
        style: google.maps.NavigationControlStyle.ANDROID
    }
};

map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

【问题讨论】:

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


【解决方案1】:

从 Maps JavaScript API 3.24 版开始,您可以在 MapOptions 对象中使用属性 clickableIcons:

https://developers.google.com/maps/documentation/javascript/3.exp/reference#MapOptions

您可以通过将 clickableIcons 属性设置为 false 来使用此属性来关闭地图上的可点击图标。还存在一个 setClickableIcons() 方法。

请看这个例子: http://jsbin.com/liyamecoqa/edit?html,output

var map;
      
      /**
       * The POIControl adds a control to the map that turns POI
       * clicking off or on.
       * This constructor takes the control DIV as an argument.
       * @constructor
       */
      function POIControl(controlDiv, map) {

        // Set CSS for the control border.
        var controlUI = document.createElement('div');
        controlUI.style.backgroundColor = '#fff';
        controlUI.style.border = '2px solid #fff';
        controlUI.style.borderRadius = '3px';
        controlUI.style.boxShadow = '0 2px 6px rgba(0,0,0,.3)';
        controlUI.style.cursor = 'pointer';
        controlUI.style.marginBottom = '22px';
        controlUI.style.textAlign = 'center';
        if (map.getClickableIcons()) {
          controlUI.title = 'Click to disable Map Icons clicks.';
        } else {
          controlUI.title = 'Click to enable Map Icons clicks.';
        }
        controlDiv.appendChild(controlUI);

        // Set CSS for the control interior.
        var controlText = document.createElement('div');
        controlText.style.color = 'rgb(25,25,25)';
        controlText.style.fontFamily = 'Roboto,Arial,sans-serif';
        controlText.style.fontSize = '16px';
        controlText.style.lineHeight = '38px';
        controlText.style.paddingLeft = '5px';
        controlText.style.paddingRight = '5px';
        if (map.getClickableIcons()) {
          controlText.innerHTML = 'Disable POIs';
        } else {
          controlText.innerHTML = 'Enable POIs';
        }
        controlUI.appendChild(controlText);

        // Setup the click event listeners: flip the clickableIcons state.
        controlUI.addEventListener('click', function() {
          var clickableIcons = map.getClickableIcons();
          if (clickableIcons) {
            controlUI.title = 'Click to enable Map Icons clicks.';
            controlText.innerHTML = 'Enable POIs';
          } else {
            controlUI.title = 'Click to disable Map Icons clicks.';
            controlText.innerHTML = 'Disable POIs';
          }
          map.setClickableIcons(!clickableIcons);
        });

      }
      
      function initMap() {
        map = new google.maps.Map(document.getElementById('map'), {
          center: {lat: -33.858667, lng: 151.214028},
          zoom: 16,
          clickableIcons: false
        });
        // Create the DIV to hold the control and call the POIControl()
        // constructor passing in this DIV.
        var poiControlDiv = document.createElement('div');
        var poiControl = new POIControl(poiControlDiv, map);

        poiControlDiv.index = 1;

        map.controls[google.maps.ControlPosition.TOP_CENTER].push(poiControlDiv);

      }
html, body {
    height: 100%;
    margin: 0;
    padding: 0;
}
#map {
    height: 100%;
}
<div id="map"></div>
<script src="https://maps.googleapis.com/maps/api/js?v=3&key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&callback=initMap"
async defer></script>

【讨论】:

    【解决方案2】:

    您可以将多边形放在 POI 上以阻止它们被点击。

    这是执行此操作的 geocodezip 示例http://www.geocodezip.com/v3_GoogleEx_rectangle-simple_RoseCanyonClear.html

    【讨论】:

    • 这样其他 POI(如火车站、大学、商店、酒店等)也无法点击?
    • 这种方式的问题是您必须手动创建多边形并指定大小。这样您就可以在总线图标所在的位置创建多边形
    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 2010-10-09
    • 2019-09-12
    相关资源
    最近更新 更多