【问题标题】:VEMap Pan triggers VEMap.onclickVEMap Pan 触发 VEMap.onclick
【发布时间】:2009-07-29 19:12:21
【问题描述】:

我正在使用 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);
}

【问题讨论】:

    标签: bing-maps virtual-earth


    【解决方案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。它也是实验性代码,可以改进,但一般方法似乎还可以。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我打算用左键点击图钉。不幸的是,VEMap.onclick 总是会被调用,因为用户通常通过左键拖放来平移地图。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-11-29
        • 2023-03-30
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 2021-04-09
        • 1970-01-01
        • 2019-10-11
        • 1970-01-01
        相关资源
        最近更新 更多