在公交车站图标上禁用点击事件

时间:2015-06-15 16:15:35

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

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

Google maps with custom marker

我将此代码用于地图:

// 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);

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:-1)

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

这是执行http://www.geocodezip.com/v3_GoogleEx_rectangle-simple_RoseCanyonClear.html

的geocodezip示例