46 votes

Gestion des événements liés aux clics dans l'API JS v3 de Google Maps tout en ignorant les doubles clics

Avec la Google Maps API JS v3, je souhaite supprimer un marqueur lorsque l'utilisateur clique sur la carte, tout en conservant le comportement par défaut lorsque l'utilisateur double clique (et pas de l'ajout d'un marqueur sur la carte).

J'ai pensé à la définition d'un délai d'attente sur l'événement click. Si un double-clic événement est déclenché au cours de la prochaine quelques millisecondes, le délai d'attente est annulée. Si pas, le marqueur est placé sur la carte, lorsque le délai expire. Mais il n'a pas vraiment l'air comme la meilleure solution.

Est-il une façon plus élégante de gérer cela?

Merci.

64voto

ShogunPanda Points 596

Je viens de trouver une solution bidon qui fonctionne mais introduit un petit temps d’attente (200 ms, c’est le minimum pour que ça marche, mais je ne sais pas si cela dépend du client)

 var update_timeout = null;

google.maps.event.addListener(map, 'click', function(event){
    update_timeout = setTimeout(function(){
        do_something_here();
    }, 200);        
});

google.maps.event.addListener(map, 'dblclick', function(event) {       
    clearTimeout(update_timeout);
});
 

J'espère que cela t'aides!

27voto

rebeliagamer Points 876

Le moyen le plus simple de le résoudre.

 var location;

function initialize() {
        map = (...)
        google.maps.event.addListener(map, 'click', function(event) {
            mapZoom = map.getZoom();
            startLocation = event.latLng;
            setTimeout("placeMarker()", 600);
        });
    }

function placeMarker() {
    if(mapZoom == map.getZoom()){
        var marker = new google.maps.Marker({
            position: location,
            map: map
        });
    }
}
 

7voto

Vous pouvez tirer parti de, dblclick se déclenche s'il s'agit d'un double clic et d'un seul clic ne se déclenche qu'une seule fois.

 runIfNotDblClick = function(fun){
    if(singleClick){
        whateverurfunctionis();
    }
};

clearSingleClick = function(fun){
    singleClick = false;
};

singleClick = false;

google.maps.event.addListener(map, 'click', function(event) {// duh! :-( google map zoom on double click!
    singleClick = true;
    setTimeout("runIfNotDblClick()", 500);
});

google.maps.event.addListener(map, 'dblclick', function(event) {// duh! :-( google map zoom on double click!
     clearSingleClick();
});
 

Voir http://www.ilikeplaces.com

-4voto

GoG Points 267

Je ne suis pas sûr, mais si vous ajoutez des gestionnaires d'événements aux deux événements 'click' et 'dblclick', où vous dites de mettre un marqueur sur un clic et que vous ne faites rien au double clic, vous pouvez ignorer l'ajout. des délais d'attente (l'API de cartes peut différer du clic et du double clic)

 google.maps.event.addListener(map, 'click', function (event) {
        placeMarker(event.latLng);
    });
google.maps.event.addListener(map, 'dblclick', function(event) { 
//DO NOTHING, BECAUSE IT IS DOUBLE CLICK
});
 

La placeMarker (latLng) est une fonction ajoutée personnalisée qui ajoute un marqueur sur l'emplacement donné:

 var marker = new google.maps.Marker({
        position: location,
        draggable: true,
        map: map
    });
map.setCenter(location);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X