IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IGN API Géoportail Discussion :

double click plutot que click


Sujet :

IGN API Géoportail

  1. #1
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut double click plutot que click
    Jusqu'à présent j'utilisais le clic sur les "feature" pour déclencher une action sur le modèle appris via ce forum du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     clickCtrlOpts = OpenLayers.Util.extend(viewer.getMap().getPopupDefaults('KML'), {        onSelect: clicCommune,
              autoActivate: true,
            handlersOptions: {
                feature: {
                    stopDown: false 
                }
            }
        });
    
    
        clickCtrl = new OpenLayers.Control.SelectFeature([layerCommune], clickCtrlOpts);
    
    
        viewer.getMap().addControl(clickCtrl);
    Comment dois-je procéder (d'une manière concrète avec donc quelques lignes de code ) pour remplacer ce clic par un double-clic?
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  2. #2
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Bonjour Christian,

    le code suivant devrait faire le boulot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        clickCtrlOpts = OpenLayers.Util.extend(viewer.getMap().getPopupDefaults('KML'), {        
              // onSelect: clicCommune,
              callbacks: {
                  // branche le dblclick sur le callback clicCommune
                  dblclick: clicCommune,
                  // desactive la gestion du click par defaut
                  click: null,
              },
              autoActivate: true,
              handlersOptions: {
                feature: {
                    stopDown: false 
                }
            }
        });
    
    
        clickCtrl = new OpenLayers.Control.SelectFeature([layerCommune], clickCtrlOpts);
    Remarque : j'ai enlevé le onSelect car dblclick est branché directement sur ta fonction clicCommune. Sinon, il aurait fallu mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       onSelect: clicCommune,
       callbacks : {
           dblclick : function(feat) {
               this.select(feat) ;
           },
           clic: null
       }

  3. #3
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Je teste tout cela et je reviens ici après pour en tirer des conclusions....
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  4. #4
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Gilles,

    Ok pour ton retour. Mais cela amène d'autres questions:

    Sur ton modèle, j'essaye d'avoir le click et le doubleclick de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    clickCtrlOpts = OpenLayers.Util.extend(viewer.getMap().getPopupDefaults('KML'), {                  callbacks: {
                  // branche le dblclick sur le callback clicCommune
                  dblclick: dblclicCommune,
                  // desactive la gestion du click par defaut
                  click: clicCommune
              },
              autoActivate: true,
              handlersOptions: {
                feature: {
                    stopDown: false 
                }
            }
        });
    Cela fonctionne bien sauf que lors du doubleclick, j'ai bien dblclicCommune mais aussi (naturellement ​!) deux fois la function clicCommune qui se lance.
    1/ J'ai cherché dans la doc ol (
    http://dev.openlayers.org/docs/files...l-js.html#Util) pour voir comment faire correctement cette distinction entre clic et dblclic. Mais comme cela m'arrive souvent avec la doc ol , je n'arrive même pas à remonter à la description de OpenLayers.Util.extend() pour voir si handlersOptions pourrait m'offrir un paramètrage correct...
    2/ Bref, comment ferais-tu pour résoudre ce conflit?
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  5. #5
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Des conseils me seraient utiles pour limiter correctement l'appel du click lors du dblclic...
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  6. #6
    Membre confirmé Avatar de lboulanger
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2014
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2014
    Messages : 262
    Points : 529
    Points
    529
    Par défaut quelques idées...
    Bonjour,

    Après une petite recherche, il semblerait que OpenLayers.Handler.Click permet de contrôler la prise en compte (ou non) d'un clic lors d'un double click, notamment avec les propriétés 'stopDouble' et 'stopSingle'.

    C'est ce qui semble être utilisé ici ou encore ici, même si ce sont des cas plus simple (évènement clic en général et non simplement sur des features KML).

    Dans votre cas, ces options pourraient peut-être être passées dans handlersOptions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    clickCtrlOpts = OpenLayers.Util.extend(viewer.getMap().getPopupDefaults("KML"), {
        callbacks:{
             // branche le dblclick sur le callback dblclicCommune
             dblclick: dblclicCommune,
             // branche le click sur le callback clicCommune
             click: clicCommune
        },
        handlersOptions: {
            feature: {stopDown: false},
            single: true,
            double: true,
            stopSingle: true,
            stopDouble: true
        },
        autoActivate: true
    });
    (non testé).

    J'espère que ça pourra vous aider un peu,

    Laurane

  7. #7
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Merci Laurane de t'être penchée sur mon problème.

    J'avais essayé d'adapter ta première référence sur http://gis.stackexchange.com/ mais sans bon résultat avant de lancer ce débat. Il faudra que j'y retourne s'il faut absolument surcharger OpenLayers.Handler.Click...

    J'ai suivi tes conseils sur cette page http://essai.obs43.fr/essai2015-4.htm mais le double clic n'est pas détecté... >> Comment rendre actif simplement les handlersOptions??

    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  8. #8
    Membre confirmé Avatar de lboulanger
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2014
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2014
    Messages : 262
    Points : 529
    Points
    529
    Par défaut
    Bonjour,

    Tout d'abord, dans la page http://essai.obs43.fr/essai2015-4.htm, l'alert dans la fonction clicCommune se lance dès le clic, donc interrompt un double clic, c'est pour ça que la fonction dblclicCommune() ne se lance pas.
    Si on remplace l'alert par un simple console.log, on peut voir dans la console que le double clic est bien détecté.

    Malheureusement, le clic est en effet toujours doublement détecté aussi.

    La surcharge d'OpenLayers.Handler.Click, comme dans les exemples qu'on a cité, permet en effet de gérer le double clic sur la carte, en détectant bien les deux évènements séparément.
    Mais je n'ai pas encore trouvé l'astuce qui permet d'associer cette gestion du double clic à la sélection des features du KML (OpenLayers.Control.SelectFeature), ça semble plus compliqué.

    En attendant, est-ce envisageable de contourner le problème ? (fonction lancée au survol (hover), affichage d'une popup...) Quelle était l'idée derrière l'utilisation du clic ET du double clic ?

    Laurane

  9. #9
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    En attendant, est-ce envisageable de contourner le problème ? (fonction lancée au survol (hover), affichage d'une popup...)
    Pas vraiment, à moins d'ignorance de ma part. J'utilise déjà le hover sur des feauture kml qui affiche des popup... Le clic renvoie sur une carte à l'échelle plus fine, avec d'autres fonctions (voir obs43.fr) plus ciblées.


    Quelle était l'idée derrière l'utilisation du clic ET du double clic ?
    Mon problème est le passage à des écrans tactiles (tablettes). Actuellement dans le cadre des tablettes, le hover du doigt sur l'api équivaut à un clic. Pour contourner ce problème, l'idée était donc de remplacer toutes les fonctions lancées initialement par le clic, par un double clic. Ainsi l'ambiguité entre hover sur tablette et clic aurait été levé...
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  10. #10
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Pas pressé, mais ne m'oubliez-pas....
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  11. #11
    Membre confirmé Avatar de lboulanger
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2014
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2014
    Messages : 262
    Points : 529
    Points
    529
    Par défaut petite piste
    Si on suit l'exemple qui est donné dans la première réponse à ce post, on peut gérer le clic ET le double clic séparément pour la sélection des communes du KML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    // Add a select control (note: this control is added to the map, but is disabled)
    var selectControl = new OpenLayers.Control.SelectFeature(
        layerCommune1,
        // SelectFeature options
        {}
    ); 
    
    // add control to the map
    viewer1.getMap().addControl(selectControl);
    
    // Handler to intercept click.
    handler = new OpenLayers.Handler.Click(
        selectControl,  // The select control
        // callbacks options
        {
            click: function(evt){
                var feature = this.layer.getFeatureFromEvent(evt);
                clicCommune(feature);
            },
            dblclick: function(evt){
                var feature = this.layer.getFeatureFromEvent(evt);
                dblclicCommune(feature);
            }
        },
        //  handlerOptions
        {
            single: true,
            double: true,
            stopDouble: true,
            stopSingle: true
        }
    );
    
    // select.activate();  // The select control must NOT be active
    handler.activate();    // The handler will handles the click events for the select control
    Par contre, le control semble être maintenant associé aussi à la carte (lancement de la fonction clicCommune au clic sur la carte..) Il faudrait regarder comment gérer ce conflit...

    Laurane

Discussions similaires

  1. [AC-2000] différencier un double-click d'un click simple
    Par atech dans le forum IHM
    Réponses: 2
    Dernier message: 26/12/2011, 20h27
  2. On Grid Click- On Title Click
    Par Redsky dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/04/2006, 14h36
  3. Faire la différence en click et shift-click
    Par htristra dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/01/2006, 22h03
  4. Trier un std::map selon les valeurs plutot que les clés
    Par dj.motte dans le forum SL & STL
    Réponses: 2
    Dernier message: 13/11/2004, 21h54
  5. Avantages du 2.6 par rapport a 2.4, Apache 2 plutot que 1.3.
    Par Aeternus dans le forum Administration système
    Réponses: 9
    Dernier message: 08/04/2004, 10h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo