Question à Dgrichard (surement) avant les vacances ?
Comment faire pour désactiver la fonction zoom à partir de la molette centrale de la souris et ne retenir que les touches (+ et -) du clavier?
Question à Dgrichard (surement) avant les vacances ?
Comment faire pour désactiver la fonction zoom à partir de la molette centrale de la souris et ne retenir que les touches (+ et -) du clavier?
Il faudrait essayer quelque chose comme ceci dans initGeoportalMap() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 var nvC= VISU.getMap().getControlsByClass('OpenLayers.Control.Navigation'); if (nvC.length>0) { nvC= nvC[0]; nvC.deactivate(); nvC.zoomWheelEnabled= false; nvC.activate(); } nvC= null;
Merci DGrichard.
A première vue, cela fonctionne sans effet négatif sous FF3
Sous IE6, il apparait une erreur non bloquante: " 'this.element.scrolls' a la valeur Null ou n'est pas un objet" ... Si cela vous déclenche une réaction...
Cette fonction devra servir à ceux qui intègrent le géoportail dans une longue page web, pour se prémunir de l'utilisation de la molette pour parcourir la page par les visiteurs ... Tant que la souris est sur la page html, la molette fait défiler la page (approche devenue réflexe normal), et puis quand elle arrive sur le géoportail, pouf on zoome, et là, le lecteur se demande ce qu'il se passe avec le rechargement de la carte, etc.... Pas bon du point de vue ergonomique!
Jusqu'à présent, la solution proposée me satisfaisait avec les claviers de poste fixe. Et puis l'autre jour, je me suis retrouvé à faire une démo sur un portable sans clavier numérique...
Pour le zoom, le + de la touche (+/=) au-dessus légèrement à droite du " P" marche bien.
Mais pour dézoomer! Bernique! Le trait d'union de la touche (6/-) n'équivaut pas au moins du pavé numérique. Alors comment pallier à ce manque?
A mon expérience, la touche ne fonctionnera pas... Alors, puisque c'est en version 1.04, il n'y aura pas de correction dans cette version, si j'ai bien compris un de tes commentaires récents... Mais peut-être en 1.05? Ou alors me donner quelques tuyaux de codage pour contourner la chose
Sous FF2/FF3/FF3.5 : comportement normal
Sous IE8 : la touche -/6 ne fonctionne pas....
Peux-tu rajouter le code suivant dans ta page (dans initGeoportalMap) ?
Chez moi, la touche "-/6" se remet à fonctionner sous IE8
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 /** * Method: defaultKeyPress * When handling the key event, we only use evt.keyCode. This holds * some drawbacks, though we get around them below. When interpretting * the keycodes below (including the comments associated with them), * consult the URL below. For instance, the Safari browser returns * "IE keycodes", and so is supported by any keycode labeled "IE". * * Very informative URL: * http://unixpapa.com/js/key.html * * Parameters: * code - {Integer} */ OpenLayers.Control.KeyboardDefaults.prototype.defaultKeyPress= function (evt) { switch(evt.keyCode) { case OpenLayers.Event.KEY_LEFT: this.map.pan(-this.slideFactor, 0); break; case OpenLayers.Event.KEY_RIGHT: this.map.pan(this.slideFactor, 0); break; case OpenLayers.Event.KEY_UP: this.map.pan(0, -this.slideFactor); break; case OpenLayers.Event.KEY_DOWN: this.map.pan(0, this.slideFactor); break; case 33: // Page Up. Same in all browsers. var size = this.map.getSize(); this.map.pan(0, -0.75*size.h); break; case 34: // Page Down. Same in all browsers. var size = this.map.getSize(); this.map.pan(0, 0.75*size.h); break; case 35: // End. Same in all browsers. var size = this.map.getSize(); this.map.pan(0.75*size.w, 0); break; case 36: // Home. Same in all browsers. var size = this.map.getSize(); this.map.pan(-0.75*size.w, 0); break; case 43: // +/= (ASCII), keypad + (ASCII, Opera) case 61: // +/= (Mozilla, Opera, some ASCII) case 187: // +/= (IE) case 107: // keypad + (IE, Mozilla) this.map.zoomIn(); break; case 45: // -/_ (ASCII, Opera), keypad - (ASCII, Opera) case 54: // -/6 (IE8 - IGNF: laptop, no numeric pad - french keyboard) case 109: // -/_ (Mozilla), keypad - (Mozilla, IE) case 189: // -/_ (IE) case 95: // -/_ (some ASCII) this.map.zoomOut(); break; } };
Si cela ne fonctionne pas chez toi : revoie moi la valeur de evt.keyCode ...
Fait, mais pas de changement. Toujours le problème d'inaction avec la touche "-/6"
Là, tu m'en demandes beaucoup! Comme cela, je ne sais pas comment trouver cette valeur... Cela doit se trouver dans firebug, mais où... Je cherche, et sitot que j'arrive à mettre la main dessus, je te l'envoie. Si cela tarde, il faudra me donner quelques consignes...
Sur ce site il suffit de presser une touche pour avoir le code associé.
Pour un complément de renseignement voir le fichier joint qui gère plus facilement les tableaux..
Correction : Le code dépend du butineur (puisque à site égal, FF et IE n'envoient pas le même code) et non du site.
As-tu vider tes caches ?
Es-tu sûr de passer dans le code "rajouté" ?
Peut être que le rajout d'un alert() ou d'un console.log() dans le code rajouté devrait suffire (juste avant le switch) ... pour vérifier !
En effet. J'ai écrit trop vite, mais dans le code que tu m'as donné, je ne vois aucun problème avec les keycode renvoyés suivant le butineur...
Toujours. En plus j'utilise systématiquement le plugin "clear cache"
Je pense.
On va faire... Mais j'ai peu d'espoir... As-tu regardé mon fichier "probleme touche zoom.doc" ?
Viens de le faire. Test négatif. La touche "6/-" n'a toujours aucun effet sur mon site d'essai http://vivlig.free.fr/
Il manque cepia.js.
Et on ne passe pas dans la fonction OpenLayers.Control.KeyboardDefaults.prototype.defaultKeyPress
car pas de coco1
Bien analysé mais...
1/ En effet, cepia.js (qui devrait contenir l'ensemble du code js qui est dans la page index.htm, pour faire plus propre) n'existe pas encore car une erreur se produit quand je fais cela (à ce sujet voir la discussion non résolue suivante)
Il est vrai que j'ai laissé cet appel <script type="text/javascript" src="./js/cepia.js"></script> mais je crois que cela n'a aucune influence sur le fonctionnement js...
2/ Quant à "coco1". Il est vrai inutile, mais mis en dernier essai (et laissé par inadvertance) pour essayer de me dépanner, histoire de voir ce qui se passait et de comprendre. Mais juste avant de mettre cette alerte, mon problème était toujours le même. Ce que tu pourras en juger puisque je viens d'enlever ce "coco1"...
Si je reprends ton code, j'écrirai la surcharge en premier :
Attention : dès que tu appuies sur SHIFT la procèdure s'enclanche ..., il faut juste appuyer sur la touche "-/6", puis commenter le premier alert en vert !
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 function initGeoportalMap() { /** * Method: defaultKeyPress * When handling the key event, we only use evt.keyCode. This holds * some drawbacks, though we get around them below. When interpretting * the keycodes below (including the comments associated with them), * consult the URL below. For instance, the Safari browser returns * "IE keycodes", and so is supported by any keycode labeled "IE". * * Very informative URL: * http://unixpapa.com/js/key.html * * Parameters: * code - {Integer} */ /* alert ("coco"); NE SERT A RIEN */ OpenLayers.Control.KeyboardDefaults.prototype.defaultKeyPress= function (evt) { alert("touche enfoncée = ["+evt.keyCode+"]"); switch(evt.keyCode) { case OpenLayers.Event.KEY_LEFT: this.map.pan(-this.slideFactor, 0); break; case OpenLayers.Event.KEY_RIGHT: this.map.pan(this.slideFactor, 0); break; case OpenLayers.Event.KEY_UP: this.map.pan(0, -this.slideFactor); break; case OpenLayers.Event.KEY_DOWN: this.map.pan(0, this.slideFactor); break; case 33: // Page Up. Same in all browsers. var size = this.map.getSize(); this.map.pan(0, -0.75*size.h); break; case 34: // Page Down. Same in all browsers. var size = this.map.getSize(); this.map.pan(0, 0.75*size.h); break; case 35: // End. Same in all browsers. var size = this.map.getSize(); this.map.pan(0.75*size.w, 0); break; case 36: // Home. Same in all browsers. var size = this.map.getSize(); this.map.pan(-0.75*size.w, 0); break; case 43: // +/= (ASCII), keypad + (ASCII, Opera) case 61: // +/= (Mozilla, Opera, some ASCII) case 187: // +/= (IE) case 107: // keypad + (IE, Mozilla) /*this.alert("coco :"); NE SERT A RIEN */ this.map.zoomIn(); break; case 45: // -/_ (ASCII, Opera), keypad - (ASCII, Opera) case 54: // -/6 (IE8 - IGNF: laptop, no numeric pad - french keyboard) case 109: // -/_ (Mozilla), keypad - (Mozilla, IE) case 189: // -/_ (IE) case 95: // -/_ (some ASCII) //case NNN: // le code que tu obtiens quant tu appuies sur la touche "-/6" ... this.map.zoomOut(); break; }; }; geoportalLoadviewer("GeoportalviewerDiv", "normal"); if (viewer) { viewer.addGeoportalLayers(['GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC'], {opacity:1.0}); }
Et puis tu nous communiques le code
Sinon, j'ai bien lu ton doc, mais il n'apporte pas grand chose dans notre problème ...
Comme je l'avais déjà signalé le code renvoyé sous FF3 (et sous ie6) est: 54.
Mais, Mais, maintenant le zoomout est opérationnel avec la touche -/6 quand je mets, comme tu me l'as demandé, OpenLayers.Control.KeyboardDefaults.prototype.defaultKeyPress= function (evt) {...} (sans alert) en tête dans la fonction initGeoportalMap() ...
Tout de même, je reste interrogatif sur le fait que seule la touche -/6 était perturbée par ma programmation initial . En toute logique primaire perso, les autres touches auraient du avoir des problèmes de détection. Non?
Mais au-delà de ces considérations métaphysiques, penses-tu qu'il faille que:
- je garde impérativement l'ensemble du codage de OpenLayers.Control.KeyboardDefaults.prototype.defaultKeyPress= function (evt) {...} que tu m'as transmis.
- je le remplace par une autre astuce plus performante (car simplifiée entre autres) de ton cru.
Partager