3

我想通过点击谷歌地图(设置中心)并在地图上移动(设置半径)来绘制一个圆圈。

当我把圆圈变大时它会起作用,但当我把圆圈变小时它不起作用。

问题是 mousemove 事件不会通过圆圈,因此当鼠标悬停在圆圈上时,地图不会触发任何 mousemouse ...

这是小提琴:http: //jsfiddle.net/charlesbourasseau/m2Cjc/4/

我也尝试在圆圈上使用mousemove,但没有成功。

这是代码:

var map = new GMaps({
  div: '#map',
  lat: 52.521832,
  lng: 13.413168,
  click: function(e) {
    var lat = e.latLng.lat();
    var lng = e.latLng.lng();

    if (circle) {
      // TODO how to really remove the circle?
      circle.setVisible(false);
    }

    circle = map.drawCircle({
      lat: lat,
      lng: lng,
      radius: 100,
      strokeColor: '#BBD8E9',
      strokeOpacity: 1,
      strokeWeight: 3,
      fillColor: 'transparent'
    });
  },
  mousemove: function(e) {
    if (!circle) {
      return ;
    }

    var distance = calculateDistance(circle.getCenter().lat(), circle.getCenter().lng(), e.latLng.lat(), e.latLng.lng());
    circle.setRadius(distance);
  }
});
4

2 回答 2

4

您的问题是您的圆圈具有透明填充,但 mousemove 事件仍被圆圈填充捕获并且不会传播到地图。这就是地图上的 mousemove 事件没有被触发的原因。

简单的解决方案就是让圆圈不可点击,这样它就不会捕获鼠标事件:

var map = new GMaps({
  div: '#map',
  lat: 52.521832,
  lng: 13.413168,
  click: function(e) {
    var lat = e.latLng.lat();
    var lng = e.latLng.lng();

    if (circle) {
      // TODO how to really remove the circle?
      circle.setVisible(false);
    }

    circle = map.drawCircle({
      lat: lat,
      lng: lng,
      radius: 100,
      strokeColor: '#BBD8E9',
      strokeOpacity: 1,
      strokeWeight: 3,
      fillColor: 'transparent',
      clickable: false
    });
  },
  mousemove: function(e) {
    if (!circle) {
      return ;
    }

    var distance = calculateDistance(circle.getCenter().lat(), circle.getCenter().lng(), e.latLng.lat(), e.latLng.lng());
    circle.setRadius(distance);
  }
});

示例:http: //jsfiddle.net/pjfs/PRX7y/

我还尝试将鼠标移动事件添加到圆圈中,然后手动触发鼠标移动地图事件,但没有成功。

于 2013-06-12T17:43:42.523 回答
3

如果您也将相同的鼠标移动处理程序添加到圆圈中,似乎也可以工作。看看这个更新的小提琴:http: //jsfiddle.net/m2Cjc/7/

circle = map.drawCircle({
        lat: lat,
        lng: lng,
        radius: 100,
        strokeColor: '#BBD8E9',
        strokeOpacity: 1,
        strokeWeight: 3,
        fillColor: 'transparent',
        mousemove: function(e) {
        var distance = calculateDistance(circle.getCenter().lat(), circle.getCenter().lng(), e.latLng.lat(), e.latLng.lng());
        circle.setRadius(distance);
        }
      }
于 2013-06-12T16:29:47.547 回答