我正在使用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);
}
答案 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地图,我在活动处理程序中有点迷失,所以这有帮助!