如何在绘图管理器控件的按钮上添加事件侦听器

How to add an event listener on the button of DrawingManagerControl?

本文关键字:按钮 添加 事件 侦听器 控件 绘图 管理器      更新时间:2023-09-26

我想在Draw Polygon按钮上捕捉click事件。但是 DrawingManager API 只提供overlaycomplete事件(多边形完成、圆完备等(。如何在这些按钮上添加click事件?特别是,如果地图上已经有一个多边形形状,我想禁止绘制第二个多边形。所以我想添加一个click处理程序到Draw Polygon按钮并返回负面响应。

上级:

所以我做了如下:

onDrawingmode_changedListener = google.maps.event.addListener(drawingManager, 'drawingmode_changed', function(e) {
   if(this.getDrawingMode() == "polygon") {
      if(polygon) {
         alert("You already have one polygon shape on the map. Remove it in order to draw a new one.");
         this.setDrawingMode(null);
      }
   }
});

没有实现的方法来访问这些控件。 您有 2 个选项:

  1. 观察 DrawingManager 实例的 drawingmode_changed 事件。当drawingmode设置为 google.maps.drawing.POLYGON 时,将其设置为 null(将无法再绘制多边形(

  2. 更新drawingManager.drawingControlOptions.drawingModes .将其设置为包含除google.maps.drawing.POLYGON之外的所有覆盖类型的数组(这将删除多边形控件(。此处还将drawingmode设置为 null


drawingmode _changed事件说明:

DrawingManager-instance是一个MVCObject。MVCObjects 具有内置的属性设置器(set()setValues() (。映射 API 使用这些资源库来设置属性。每次使用这些方法时,都会触发一个事件,其名称由属性名称和字符串_changed组成(例如,当您通过 setter 设置MVCObject的属性weather时,将触发一个事件weather_changed(。当您使用特定的setter-functions(setZoom,setCenter,setMap等(时,也会发生这种情况。

因此,您可以假设对于 MVCObject 的每个属性,只要使用资源库(适用于内置属性和自定义属性(,_changed -event 就会触发,无论事件是否被记录。

例:

        google.maps.event.addListener(map,'weather_changed',function(){
          alert('it''s '+this.get('weather'));
        });
         //this will fire a weather_changed-event
        map.set('weather','rainy');
         //this will not fire an event, because it doesn't use a setter-method
        map.weather='rainy';