2009-07-29 6 views
2

J'utilise le SDK Virtual Earth (ou Bing! ...) et j'ai besoin d'attacher un événement quand quelqu'un clique sur la carte. Malheureusement, le déplacement de la carte déclenche également l'événement onclick. Quelqu'un connaît-il une solution de rechange?VEMap Pan triggers 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); 
} 

Répondre

0

Tout dépend de ce que vous essayez de faire. Vous pouvez vérifier quel bouton de la souris a été enfoncé pendant le gestionnaire d'événement onclick. Par exemple: Si c'était le bouton gauche de la souris alors ne faites rien, sinon si c'est le bouton droit de la souris, faites votre logique pour afficher un message, ou une punaise, etc

Pour clarifier, seulement afficher la carte en utilisant la souris déclenchera l'événement onclick. Si vous utilisez les petites flèches sur le tableau de bord de navigation, cela ne déclenchera pas l'événement onclick.

+0

Je prévois de tracer une punaise avec un clic gauche. Malheureusement, VEMap.onclick sera toujours appelé car les utilisateurs effectuent généralement un panoramique de la carte par glisser-déposer vers la gauche. – Jason

1

Je rencontre le même problème. Ce n'est certainement pas ce à quoi je m'attendais, un événement click dans ma terminologie implique que la distance entre mouseDown et mouseUp est inférieure à un certain seuil.

Voici un code qui fonctionne dans mes expériences:

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

Le message ne sera affiché que si la souris ne bougeait pas trop entre le bas et le haut des événements, à savoir un clic normale devrait déclencher , un frein ne devrait pas.

Ceci utilise l'API VE dans la version 6.2 et attend deux divs avec les identifiants "myMap" et "myMapInfo". C'est aussi un code expérimental qui pourrait être amélioré, mais l'approche générale semble correcte.

0

Merci Peter, cela fonctionne très bien avec 6.3 aussi. Je découvre des cartes Bing et je suis un peu perdu dans les gestionnaires d'événements, alors ça m'a aidé!

Questions connexes