2009-07-29 3 views
2

Ich benutze das Virtual Earth (oder Bing! ...) SDK und muss ein Ereignis anhängen, wenn jemand auf die Karte klickt. Leider löst das Verschieben der Karte auch das onclick-Ereignis aus. Kennt jemand eine Arbeit herum?VEMap Pan löst VEMap.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); 
} 

Antwort

0

Alles hängt davon ab, was Sie versuchen zu tun. Sie können prüfen, welche Maustaste während des onclick-Event-Handlers gedrückt wurde. Zum Beispiel: Wenn es die linke Maustaste war, dann tu nichts, sonst die rechte Maustaste, dann führe deine Logik aus, um eine Nachricht oder einen Plot-Pin anzuzeigen.

Um das klarzustellen, verschwende nur die Karte mit der Maus wird das Onclick-Ereignis auslösen. Wenn Sie die kleinen Pfeile im Navigations-Dashboard verwenden, wird das onclick-Ereignis nicht ausgelöst.

+0

Ich plane einen Reißzwecke mit einem Linksklick. Leider wird VEMap.onclick immer aufgerufen, da Benutzer die Karte normalerweise per Drag-and-Drop mit der linken Maustaste verschieben. – Jason

1

Ich habe das gleiche Problem. Es ist sicherlich nicht das, was ich erwarten würde, ein Klickereignis in meiner Terminologie impliziert, dass der Abstand zwischen mouseDown und mouseUp unterhalb einer bestimmten Schwelle liegt.

Hier ist ein Code, der in meinen Versuchen funktioniert:

<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> 

Die Meldung wird nur angezeigt, wenn die Maus nicht zu viel zwischen den nach unten bewegen und Veranstaltungen, dh ein normaler Klick sollte es auslösen ein Ziehen sollte nicht.

Dies verwendet die VE-API in Version 6.2 und erwartet zwei Divs mit den IDs "myMap" und "myMapInfo". Es ist auch Code, der experimentell ist und verbessert werden könnte, aber der allgemeine Ansatz scheint in Ordnung zu sein.

0

Danke Peter, das funktioniert auch gut mit 6.3. Ich entdecke Bing-Maps und bin in den Event-Handlern etwas verloren, das hat mir geholfen!

Verwandte Themen