2012-12-13 5 views
6

Ho un indicatore sulla mappa per cui voglio legare due eventi:Google Map API V3 - Come prevenire clic del mouse di eventi per un marcatore quando l'utente in realtà è doppio click

  1. click
  2. DoppioClic

voglio fare quanto segue:

  1. Quando l'utente fa clic sul marcatore, mappa dovrebbe zoom-in e mostrerà mappa più dettagliata.
  2. voglio legare evento 'DblClick' per lo stesso indicatore in modo che lo farà carico alcuni rapporti di terze parti in elemento adiacente 'div'.

In altre parole, voglio che si comporti in modo diverso quando l'utente fa clic o dblclicks. Ma il problema è che quando lego entrambi questi eventi al marcatore e ai 'doppio clic' dell'utente il marker, il gestore 'click' viene licenziato, che non voglio permettere che accada.

E 'vero che, quando l'utente fa doppio clic, fare clic evento è anche licenziato? In caso affermativo, come impedirgli di attivare l'evento "click" quando l'utente ha effettivamente fatto doppio clic? Esiste un modo per poter fare cose diverse su entrambi gli eventi click e doppio clic del marker?

risposta

4

E 'una sfumatura nota delle API, è necessario installare un timeout click banco, in questo modo:

function createMap2() { 
    var infoWindow = new google.maps.InfoWindow(); 
    var map = new google.maps.Map(document.getElementById("map2"), myOptions); 

    var doubleClicked=false; 
    var clickEvent; 

    google.maps.event.addListener(map, 'dblclick', function(event) { 
    doubleClicked=true; 
    }); 

    function handleClick() { 
    if (!doubleClicked) { 
     infoWindow.setPosition(clickEvent.latLng); 
     infoWindow.setContent(createInfo(clickEvent)); 
     infoWindow.open(map); 
    } 
    } 

    google.maps.event.addListener(map, 'click', function(event) { 
    clickEvent = event; 
    doubleClicked = false; 
    window.setTimeout(handleClick, 250); 
    }); 
} 

Sopra il codice estratto da http://www.william-map.com/20100506/1/v3click.htm

Guarda anche questi link per ulteriori informazioni:

https://groups.google.com/forum/?fromgroups=#!topic/google-maps-js-api-v3/YRAvYHngeNk https://groups.google.com/forum/?fromgroups=#!topic/google-maps-js-api-v3/2MomDiLMEiw

0

È possibile utilizzare un pre-h funzione andler che separa il singolo dal doppio clic. In questo caso, il secondo clic deve venire entro 500 millisecondi del primo:

//Global vars 
var G = google.maps; 
var clickTimeOut = null; 

G.event.addListener(marker,'click',mClick); 


function mClick(mev) { 
    if (clickTimeOut) { 
     window.clearTimeout(clickTimeOut); 
     clickTimeOut = null; 
     doubleClick(mev); 
    } 
    else { 
     clickTimeOut = window.setTimeout(function(){singleClick(mev)},500); 
    } 
} 

function doubleClick(mev) { 
    // handle double click here 
} 

function singleClick(mev) { 
    window.clearTimeout(clckTimeOut); 
    clickTimeOut = null; 
    // handle single click here 
} 

MeV è il mouseEvent object che i gestori di eventi ricevono come parametro.

Problemi correlati