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 :

Controles impossible en mobile API geoportail


Sujet :

IGN API Géoportail

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 13
    Points : 15
    Points
    15
    Par défaut Controles impossible en mobile API geoportail
    Bonjour,

    nous avons mis en place l'api geoportail sur notre site grand publique et nous rencontrons un souci quand nous basculons sur mobile. En effet, nous avons conservé le viewer par défaut et il n'est plus possible de cliquer sur les cases à cocher pour activer une couche, ou de masquer/Afficher le gestionnaire de couches. les clics sont directement interprété par la map.

    Comment retrouver le comportement correct ?

  2. #2
    Membre éclairé Avatar de jrenard
    Homme Profil pro
    Webdesigner / développeur front-end
    Inscrit en
    Septembre 2013
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webdesigner / développeur front-end
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 456
    Points : 894
    Points
    894
    Par défaut
    Bonjour,

    C'est effectivement un comportement connu et très gênant. Pour expliquer de façon triviale, les évènements tactiles de touchstart et touchend "traversent" les contrôles pour aller agir sur la carte qui se trouve derrière.

    Pour éviter ce comportement, il va falloir redéfinir le comportement associé à ces évènements sur chacun des contrôles, de manière à :
    - supprimer leur comportement par défaut
    - arrêter la propagation de l'élément au travers du contrôle
    - et dans le cas du touchstart affecter le comportement attendu en appelant le comportement qui se déclenche par défaut en monde non tactile (à ne pas dupliquer dans le touchend sinon l'action sera lancée deux fois).

    En pratique, imaginons que vous ayez créé un bouton permettant de faire un zoom avant sur votre carte, de nom de contrôle "ZoomOn" et géré par un élément HTML de classe "boutonZoomOnItemInactive", la gestion des comportements tactiles se ferait de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $('.boutonZoomOnItemInactive').on('touchstart', function(e) {
    	e.preventDefault(); // Annulation du comportement par défaut
    	e.stopPropagation(); // Arrêt de la propagation
    	boutonZoomOn.trigger(); // lancement de l'action souhaitée
    });
    $('.boutonZoomOnItemInactive').on('touchend', function(e) {
    	e.preventDefault(); // Annulation du comportement par défaut
    	e.stopPropagation(); // Arrêt de la propagation
    });
    Ce bout de code en JQuery est à adapter en Javascript pur si on utilise pas JQuery, et à appliquer sur tous les contrôles de la carte, le plus délicat étant de bien redéfinir l'action souhaitée.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par jrenard Voir le message
    Bonjour,

    C'est effectivement un comportement connu et très gênant. Pour expliquer de façon triviale, les évènements tactiles de touchstart et touchend "traversent" les contrôles pour aller agir sur la carte qui se trouve derrière.

    Pour éviter ce comportement, il va falloir redéfinir le comportement associé à ces évènements sur chacun des contrôles, de manière à :
    - supprimer leur comportement par défaut
    - arrêter la propagation de l'élément au travers du contrôle
    - et dans le cas du touchstart affecter le comportement attendu en appelant le comportement qui se déclenche par défaut en monde non tactile (à ne pas dupliquer dans le touchend sinon l'action sera lancée deux fois).

    En pratique, imaginons que vous ayez créé un bouton permettant de faire un zoom avant sur votre carte, de nom de contrôle "ZoomOn" et géré par un élément HTML de classe "boutonZoomOnItemInactive", la gestion des comportements tactiles se ferait de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $('.boutonZoomOnItemInactive').on('touchstart', function(e) {
    	e.preventDefault(); // Annulation du comportement par défaut
    	e.stopPropagation(); // Arrêt de la propagation
    	boutonZoomOn.trigger(); // lancement de l'action souhaitée
    });
    $('.boutonZoomOnItemInactive').on('touchend', function(e) {
    	e.preventDefault(); // Annulation du comportement par défaut
    	e.stopPropagation(); // Arrêt de la propagation
    });
    Ce bout de code en JQuery est à adapter en Javascript pur si on utilise pas JQuery, et à appliquer sur tous les contrôles de la carte, le plus délicat étant de bien redéfinir l'action souhaitée.
    Bonjour,

    merci pour cette réponse, n'existe-t-il pas un moyen plus rapide de redéfinir le comportement pour les contrôles natifs (arbre des couches, fenêtre de controle ?) comme dans la PJ ?Nom : Capture d’écran 2015-10-30 à 15.09.12.png
Affichages : 323
Taille : 68,9 Ko

  4. #4
    Membre éclairé Avatar de jrenard
    Homme Profil pro
    Webdesigner / développeur front-end
    Inscrit en
    Septembre 2013
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webdesigner / développeur front-end
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 456
    Points : 894
    Points
    894
    Par défaut
    Malheureusement non.

    SI je prends par exemple l'ouverture du gestionnaire de couches qui intervient normalement au clic sur son titre, voilà comment il faut redéfinir les choses :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var lsTitle = document.getElementsByClassName('gpControlLabelClass')[0];
      lsTitle.addEventListener('touchstart',function(e) {
        e.preventDefault();
        e.stopPropagation();
        lsTitle.click();
      });
      lsTitle.addEventListener('touchend',function(e) {
        e.preventDefault();
        e.stopPropagation();
      });

    Et alors vous retrouvez en comportement tactile le comportement constaté normalement au clic.

    Il vous faut donc pointer tous les éléments qui rencontrent le problème, et à partir de leur nom de classe redéfinir l'appel au clic lors d'un évènement tactile, exactement de la même manière. En collant ce morceau de code sur tous les contrôles posant problème, vous devriez vous en sortir.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par jrenard Voir le message
    Malheureusement non.

    SI je prends par exemple l'ouverture du gestionnaire de couches qui intervient normalement au clic sur son titre, voilà comment il faut redéfinir les choses :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var lsTitle = document.getElementsByClassName('gpControlLabelClass')[0];
      lsTitle.addEventListener('touchstart',function(e) {
        e.preventDefault();
        e.stopPropagation();
        lsTitle.click();
      });
      lsTitle.addEventListener('touchend',function(e) {
        e.preventDefault();
        e.stopPropagation();
      });

    Et alors vous retrouvez en comportement tactile le comportement constaté normalement au clic.

    Il vous faut donc pointer tous les éléments qui rencontrent le problème, et à partir de leur nom de classe redéfinir l'appel au clic lors d'un évènement tactile, exactement de la même manière. En collant ce morceau de code sur tous les contrôles posant problème, vous devriez vous en sortir.

    Bonjour merci pour ce complément et la confirmation qu'il n'y avait pas de moyen plus rapide

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Je rencontre actuellement le même problème. J'ai pu résoudre une partie de ce problème grâce à la solution de jrenard.
    Cependant je n'arrive pas à faire en sorte que le "slider" permettant de gérer le niveau de zoom soit utilisable sur mobile.
    Si l'un d'entre vous a une solution, je suis preneur !

    Merci et bonne fin d'année à tous

  7. #7
    Membre éclairé Avatar de jrenard
    Homme Profil pro
    Webdesigner / développeur front-end
    Inscrit en
    Septembre 2013
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webdesigner / développeur front-end
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 456
    Points : 894
    Points
    894
    Par défaut
    Bonjour,

    Retrouver le comportement intégral du slider sur mobile va être compliqué car sa structure et sa gestion évènementielle sont assez complexes. En particulier, permettre le cliquer-glisser sera probablement très complexe à mettre en oeuvre en mode tactile.

    On peut en revanche à peu de frais rendre le slider fonctionnel dans sa capacité à changer le niveau de zoom lorsque l'on fait un clic simple dessus. Il suffit pour cela de stopper la propagation des évènement tactiles sur la barre de zoom :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var lsZoomBar = document.getElementsByClassName('gpZoomBarClass')[0];
    lsZoomBar.addEventListener('touchstart',function(e) {
        e.stopPropagation();
    });
    lsZoomBar.addEventListener('touchend',function(e) {
        e.stopPropagation();
    });

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Je me doutais en effet que reproduire ce comportement pouvait être complexe. Dans tous les cas merci beaucoup, cette solution me convient très bien !

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Accès cadastre via API Geoportail
    Par olivier_f dans le forum IGN API Géoportail
    Réponses: 21
    Dernier message: 13/05/2012, 16h12
  2. Api GeoPortail et toponymes
    Par _loki_ dans le forum IGN API Géoportail
    Réponses: 5
    Dernier message: 10/01/2010, 12h12
  3. Dysfonctionnement API Geoportail Guadeloupe
    Par oncidium dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 17/09/2009, 20h39
  4. Connection impossible avec un API Omron
    Par Fr33dom dans le forum Automation
    Réponses: 4
    Dernier message: 06/08/2009, 10h47
  5. Calcul d'itinéraire avec l'API GeoPortail
    Par spiau dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 21/07/2009, 19h08

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