2

我正在使用虚拟地球(或必应!...)SDK,并且需要在有人单击地图时附加一个事件。不幸的是,平移地图也会触发 onclick 事件。有谁知道解决方法?

function GetMap(){
    map = new VEMap('dvMap');
    map.LoadMap(new VELatLong(35.576916524038616,-80.9410858154297), 11, 'h',false);
    mapIsInit = true;
    map.AttachEvent('onclick', MapClick);
}

function MapClick(e){
    var clickPnt = map.PixelToLatLong(new VEPixel(e.mapX,e.mapY));
    Message('Map X: ' + clickPnt.Longitude + '\nMap Y: ' + clickPnt.Latitude + '\nZoom: ' + e.zoomLevel);
}
4

3 回答 3

1

我遇到了同样的问题。这当然不是我所期望的,在我的术语中单击事件意味着 mouseDown 和 mouseUp 之间的距离低于某个阈值。

以下是一些在我的实验中有效的代码:

<script type="text/javascript">
  var mouseDownLocation;
  var mouseClickThreshold = 5;

  function init()
  {
    var map = new VEMap('myMap');
    map.LoadMap(new VELatLong(-27.15,153),8,'r' ,false);
    map.AttachEvent("onmousedown", function(e) {
        var x = e.mapX;
        var y = e.mapY;
        mouseDownLocation = new VEPixel(x, y);
    });
    map.AttachEvent("onmouseup", function(e) {
        var x = e.mapX;
        var y = e.mapY;
        if(Math.abs(mouseDownLocation.x - x) + 
               Math.abs(mouseDownLocation.y - y) > mouseClickThreshold) {
            return;
        }
        pixel = new VEPixel(x, y);
        var LL = map.PixelToLatLong(pixel);
        document.getElementById("myMapInfo").innerHTML = 
               "Pixel X: " + x + " | Pixel Y: " + y + 
               "<br /> LatLong: " + LL + 
               "<br/>" + e.eventName;
    });
  }  
</script>

仅当鼠标在向下和向上事件之间没有移动太多时才会显示该消息,即正常单击应该触发它,而不是拖动。

这是使用 6.2 版中的 VE API,并且需要两个 ID 为“myMap”和“myMapInfo”的 div。它也是实验性代码,可以改进,但一般方法似乎还可以。

于 2009-11-26T03:38:28.247 回答
0

谢谢彼得,这也适用于 6.3。我正在发现 Bing 地图,我在事件处理程序中有点迷失,所以这有帮助!

于 2010-09-24T14:06:00.727 回答
0

这一切都取决于你想要做什么。您可以检查在 onclick 事件处理程序期间按下了哪个鼠标按钮。例如:如果是鼠标左键,则什么也不做,否则如果是鼠标右键,则执行逻辑以显示消息或绘制图钉等。

澄清一下,只有使用鼠标平移地图才会触发 onclick 事件。如果使用导航仪表板上的小箭头,则不会触发 onclick 事件。

于 2009-07-30T03:10:23.810 回答