VEMap Pan触发VEMap.onclick

时间:2009-07-29 19:12:22

标签: bing-maps virtual-earth

我正在使用Virtual Earth(或Bing!...)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);
}

3 个答案:

答案 0 :(得分: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。它也是实验性的代码,可以改进,但一般的方法似乎没问题。

答案 1 :(得分:0)

这完全取决于你想要做什么。您可以检查onclick事件处理程序中按下了哪个鼠标按钮。例如:如果它是鼠标左键然后什么也不做,否则如果它是鼠标右键然后你的逻辑显示消息,或绘图图钉等。

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

答案 2 :(得分:0)

谢谢彼得,这也很适合6.3。我正在发现Bing地图,我在活动处理程序中有点迷失,所以这有帮助!