Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Indiquer la position de la souris : javascript ?

55 réponses
Avatar
Hugolino
Salut,

Je suis prof de physique et je donne souvent mes TP sous forme de page
HTML.
Dans un TP, <http://urlalacon.com/B2eh1o> j'ai besoin que mes élèves
analysent des jpeg extraits d'une vidéo. J'aurais besoin que s'affiche
dans le navigateur la position de la souris (en pixels).

Est-ce que seul un langage de script comme javascript permettrait de
faire ça, ou est-ce que je peux m'en tirer avec de la css pure. Parce
que javascript, j'y connais rien :/

Tant qu'à faire, si javascript est requis, il faudrait qu'ils puissent
cliquer deux points particuliers de la photo pour que les pixels soit
convertis en millimètre. (parce que je connais la distance entre ces
deux points qui se déplacent sur les photos).

Si vous pouviez me fournir le nom des fonctions javascript qui
permettent de faire ça, je gagnerais un peu de temps dans mes
recherches.

D'ailleurs puisque je ne connais rien à javascript, est-ce qu'il n'y
aurait pas maintenant un langage coté client plus évolué/facile/puissant
que javascript, ou est-ce devenu un standard incontournable ?


Merci de vos avis


--
Il a fallu des millions d'années pour développer la capacité à raisonner
des hommes. Mais il suffit de quelques instants de logique féminine
pour l'abattre.
Hugo (né il y a 1 388 582 249 secondes)

10 réponses

1 2 3 4 5
Avatar
Guy Gruais
Bonjour,

Vous allez être infiniment heureux d'apprendre que Hugolino vient d'écrire
:

J'aurais besoin que s'affiche
dans le navigateur la position de la souris (en pixels).



Dans google, je viens de taper "position de la souris dans une page" et
j'obtiens ceci :

http://www.google.com/search?q=position+de+la+souris+dans+une+page&sourceid=ie7&rls=com.microsoft:en-US&ie=utf8&oe=utf8

Yapuka ... ... faire le tri

--
Cordialement

(inverser siaurg pour retrouver gruais)
http://paysderetz.free.fr/
Avatar
Mickaël Wolff
Hugolino a écrit :

Dans un TP, <http://urlalacon.com/B2eh1o> j'ai besoin que mes élèves
analysent des jpeg extraits d'une vidéo. J'aurais besoin que s'affiche
dans le navigateur la position de la souris (en pixels).



On pourrait penser que c'est trivial, mais non. Pour avoir la position
dans l'image, il faut déjà savoir où est l'image, car les coordonnées de
clique données par l'événement est relative à la zone d'affichage ou
l'origine du document. Avec l'interface normale DOM :
<http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-eventgroupings-mouseevents>

Il faut donc connaître la position de l'image (pour faire un
changement de coordonnées). Mais.. rien de normalisé (qu'on me corrige
si je me trompe) ne permet de récupérer la position d'un élément.
offsetTop et offsetLeft sont les attributs javascript d'un élément HTML
assez répendus.

Ensuite, attraper les événements de la souris est assez simple, que ce
soit via les attributs HTML
<http://www.w3.org/TR/html4/struct/objects.html#edef-IMG>, l'API DOM
Event
<http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-eventgroupings-mouseevents>,
ou l'objet javascript
<http://developer.mozilla.org/en/docs/DOM:element#Introduction>.

Est-ce que seul un langage de script comme javascript permettrait de
faire ça, ou est-ce que je peux m'en tirer avec de la css pure. Parce
que javascript, j'y connais rien :/



Les CSS sont destinées pour la présentation, pas pour l'interactivité.

Tant qu'à faire, si javascript est requis, il faudrait qu'ils puissent
cliquer deux points particuliers de la photo pour que les pixels soit
convertis en millimètre. (parce que je connais la distance entre ces
deux points qui se déplacent sur les photos).



Pas de problème, il suffira de le coder.

D'ailleurs puisque je ne connais rien à javascript, est-ce qu'il n'y
aurait pas maintenant un langage coté client plus évolué/facile/puissant
que javascript, ou est-ce devenu un standard incontournable ?



Je me disais bien que c'était un troll :)
Tu peux utiliser le langage que tu souhaites, il faut que le
navigateur puisse l'interpréter. Ce qu'il y a de plus répandu, ce sont
des dialectes d'ecmascript, abusivement nommés javascript. Il y a entre
autre javascript(mozilla) et jscript(microsoft), sans compter les
implémentations des autres navigateurs qui tentent d'avoir le
comportement le plus proche possible de la norme ou du standard (MS).

Mais javascript est un langage assez simple, je vois difficilement
comment faire plus simple tout en conservant sa puissance. Et en quoi
javascript n'est pas un langage évolué, à défaut d'être évalué (oui,
c'est facile) ?

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
SAM
Hugolino a écrit :
Salut,

Je suis prof de physique et je donne souvent mes TP sous forme de page
HTML.
Dans un TP, <http://urlalacon.com/B2eh1o> j'ai besoin que mes élèves
analysent des jpeg extraits d'une vidéo. J'aurais besoin que s'affiche
dans le navigateur la position de la souris (en pixels).

Est-ce que seul un langage de script comme javascript permettrait de
faire ça,



oui

ou est-ce que je peux m'en tirer avec de la css pure.



non

Parce que javascript, j'y connais rien :/



Il n'est pas trop tard pour s'y mettre :-)

à mettre dans le head du fichier :
(pas certain que mes axes x et y soient les bons ...!)

<script type="text/javascript">
var posx, posy, k;
function MouseCatch(e, px2mm) {
// px2mm est le facteur de conversion pixels --> mm
// relatif à l'image cliquée
posx = e.offsetX ? e.offsetX : e.clientX-e.target.x;
posy = e.offsetY ? e.offsetY : e.clientY-e.target.y;
posx = Math.round(posx * px2mm);
posy = Math.round(posy * px2mm);
window.status='X: '+posx+'mm - Y: '+posy+'mm';
return true;
}
function key(evt) { k = (evt && evt.shiftKey); }
function coords(exo) {
exo = exo.id;
exo += k? '_point_2_' : '_point_1_';
document.monForm[exo+'x'].value = posx;
document.monForm[exo+'y'].value = posy;
}
</script>

et pour le truc bazar, dans le body :

<form action="rapport.php" method="post">
<input type="hidden" value="TP_001">
<h3><u>Clic</u> pour repérer le 1er point et
<u>Majuscule + clic</u> pour le 2ième point :</h3>
<p><img src="exo_001.jpg" id="exo_001"
onmousemove="MouseCatch(event, 0.256);"
onclick="key(event); coords(this);"><br>
Point 1 :
x = <input size=6 name="exo_001_point_1_x">
y = <input size=6 name="exo_001_point_1_y"><br>
Point 2 -
x = <input size=6 name="exo_001_point_2_x">
y = <input size=6 name="exo_001_point_2_y">
</p>
<p><img src="exo_002.jpg" id="exo_002"
onmousemove="MouseCatch(event, 0.647);"
onclick="key(event); coords(this);"><br>
Point 1 :
x = <input size=6 name="exo_002_point_1_x">
y = <input size=6 name="exo_002_point_1_y"><br>
Point 2 -
x = <input size=6 name="exo_002_point_2_x">
y = <input size=6 name="exo_002_point_2_y">
</p>
... etc ...
<p><input type=submit>
</form>

Tant qu'à faire, si javascript est requis, il faudrait qu'ils puissent
cliquer deux points particuliers de la photo pour que les pixels soit
convertis en millimètre. (parce que je connais la distance entre ces
deux points qui se déplacent sur les photos).



mieux vaudrait connaitre le rapport width en px / width en mm de l'image

D'ailleurs puisque je ne connais rien à javascript, est-ce qu'il n'y
aurait pas maintenant un langage coté client plus évolué/facile/puissant
que javascript, ou est-ce devenu un standard incontournable ?



côté client il n'y a que le JS

éventuellement un applet en JAVA ?
(voir si google n'a pas ça en stock ?)


--
sm
Avatar
SAM
Mickaël Wolff a écrit :

Il faut donc connaître la position de l'image



Ha bon ?

Je n'ai pas ce problème dans mes brouteurs
(même avec IE Mac)
<http://cjoint.com/?eAn6mLCD3z>
en supposant que j'aie compris le but recherché ?!

Ensuite, attraper les événements de la souris est assez simple, que ce
soit via les attributs HTML



assez simple ... assez simple ... c'est quand même un peu vite dit :
<http://www.quirksmode.org/js/findpos.html>
<http://www.quirksmode.org/dom/w3c_cssom.html#mousepos>

--
sm
Avatar
Mickaël Wolff
SAM a écrit :
Je n'ai pas ce problème dans mes brouteurs
(même avec IE Mac)
<http://cjoint.com/?eAn6mLCD3z>
en supposant que j'aie compris le but recherché ?!



Arf, ben au temps pour moi, j'étais persuadé que offsetWidth et
compagnie étaient absolus et non relatifs, ce qui change tout. Du coup,
c'est trivial.

assez simple ... assez simple ... c'est quand même un peu vite dit :



Quelque chose d'assez simple n'est pas quelque chose de trivial :p

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
Hugolino
Le Sat, 26 Apr 2008 11:56:50 +0200, Guy Gruais a écrit:
Bonjour,

Vous allez être infiniment heureux d'apprendre que Hugolino vient d'écrire
:

> J'aurais besoin que s'affiche dans le navigateur la position de la
> souris (en pixels).

Dans google, je viens de taper "position de la souris dans une page" et
j'obtiens ceci :

http://www.google.com/search?q=position+de+la+souris+dans+une+page&sourceid=ie7&rls=com.microsoft:en-US&ie=utf8&oe=utf8

Yapuka ... ... faire le tri



Oops!
<plates excuses>
Marrant comment je peux oublier de googliser alors que je suis sue le
web au moins 4 heures par jour...
</plates excuses>


--
la plupart des automobilistes n'ont aucune idée de comment fonctionne
une moto


Si : trop vite, et en faisant trop de bruit.
Hugo (né il y a 1 388 759 135 secondes)
Avatar
Hugolino
Le Sat, 26 Apr 2008 12:39:00 +0200, Mickaël Wolff a écrit:
Hugolino a écrit :

> Dans un TP, <http://urlalacon.com/B2eh1o> j'ai besoin que mes élèves
> analysent des jpeg extraits d'une vidéo. J'aurais besoin que s'affiche
> dans le navigateur la position de la souris (en pixels).

On pourrait penser que c'est trivial, mais non. Pour avoir la position
dans l'image, il faut déjà savoir où est l'image, car les coordonnées de
clique données par l'événement est relative à la zone d'affichage ou
l'origine du document.



Attention, je veux d'une part que:
* la position de la souris (x et y) soit constamment affichée dans deux
champs (champ_x_px et champ_y_px) et mise à jour en temps réel, pas
que le user soit obligé de cliquer.
* que lors d'un clic, la position de la souris soient affichées dans
deux autres champs, appelons-les champA_x et champA_y
* que lors d'un MAJ-clic (merci à SAM pour l'idée) la position de la
souris soit affichée dans champB_x et champB_y, et puisque je connais
la dimension de la pièce en plastique, qu'un facteur de conversion
entre pixel et mm soit calculé et que finalement, en dessous de
champ_x_px et champ_y_px, soit troujours en temps réel, affiché les
coordonnée de la souris en mm à partir du coin supérieur gauche de la
photo.

Avec l'interface normale DOM :


Tout ce que je sais de DOM, c'est que ça signifie "Document Object
Model", mais je ne sais pas vraiment à quoi ça sert, si c'est
indispensable pour faire ce que je veux et si ça va être facile à
comprendre.
J'ai jeté un oeil sur sa définition sur wikipedia, ça a l'air quand même
d'un marteau pour écraser une mouche quand on le rapporte à mon petit
problème

<http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-eventgroupings-mouseevents>



Malheureusement en anglais, que j'arrive à lire une fois que j'ai
apréhendé les notions de bases à partir d'un document en français.

Il faut donc connaître la position de l'image (pour faire un
changement de coordonnées). Mais.. rien de normalisé (qu'on me corrige
si je me trompe) ne permet de récupérer la position d'un élément.
offsetTop et offsetLeft sont les attributs javascript d'un élément HTML
assez répendus.



Si ça pose un problème, je mets toutes les marges à zéro et je coince
l'image en haut à gauche.

Ensuite, attraper les événements de la souris est assez simple, que ce
soit via les attributs HTML
<http://www.w3.org/TR/html4/struct/objects.html#edef-IMG>, l'API DOM
Event
<http://www.w3.org/TR/DOM-Level-3-Events/events.html#Events-eventgroupings-mouseevents>,
ou l'objet javascript
<http://developer.mozilla.org/en/docs/DOM:element#Introduction>.


> Est-ce que seul un langage de script comme javascript permettrait de
> faire ça, ou est-ce que je peux m'en tirer avec de la css pure. Parce
> que javascript, j'y connais rien :/

Les CSS sont destinées pour la présentation, pas pour l'interactivité.



C'est juste, mais j'ai été surpris par certains sites qui ne fonctionne
qu'avec les CSS alors que j'étais à première vue persuadé qu'il y a
avait des scripts derrière...

> Tant qu'à faire, si javascript est requis, il faudrait qu'ils puissent
> cliquer deux points particuliers de la photo pour que les pixels soit
> convertis en millimètre. (parce que je connais la distance entre ces
> deux points qui se déplacent sur les photos).

Pas de problème, il suffira de le coder.



Il s'agira d'une bête mise à l'échelle.

> D'ailleurs puisque je ne connais rien à javascript, est-ce qu'il n'y
> aurait pas maintenant un langage coté client plus évolué/facile/puissant
> que javascript, ou est-ce devenu un standard incontournable ?

Je me disais bien que c'était un troll :)



J'avoue ne pas comprendre en quoi mon poste peut passer pour un troll.

Tu peux utiliser le langage que tu souhaites, il faut que le
navigateur puisse l'interpréter. Ce qu'il y a de plus répandu, ce sont
des dialectes d'ecmascript, abusivement nommés javascript. Il y a entre
autre javascript(mozilla) et jscript(microsoft), sans compter les
implémentations des autres navigateurs qui tentent d'avoir le
comportement le plus proche possible de la norme ou du standard (MS).

Mais javascript est un langage assez simple, je vois difficilement
comment faire plus simple tout en conservant sa puissance. Et en quoi
javascript n'est pas un langage évolué, à défaut d'être évalué (oui,
c'est facile) ?



Bon, bin va falloir s'y mettre :)



--
C'est l'histoire d'un gars qui veut la machine la plus puissante du
monde sous Windows 95 en emulation sous Wine qui tourne sur une station
FreeBSD avec bibliotheque de compatibilite Linux.
Hugo (né il y a 1 388 766 415 secondes)
Avatar
Hugolino
Le Sat, 26 Apr 2008 14:09:16 +0200, SAM a écrit:
Mickaël Wolff a écrit :
>
> Il faut donc connaître la position de l'image

Ha bon ?

Je n'ai pas ce problème dans mes brouteurs
(même avec IE Mac)
<http://cjoint.com/?eAn6mLCD3z>



C'est (presque) exactement ça que je veux. Je dis presque car je veux en
plus la position en temps réel de la souris.
Mais je n'ai pas réussi à voir le code javascript en ouvrant le code
source de cette page.
Est-ce le même que celui que tu donnes dans ton autre post ? (qui semble
ne pas marcher chez moi: cf ma réponse à ton autre post)

en supposant que j'aie compris le but recherché ?!



Si, si c'est ça que je veux.

> Ensuite, attraper les événements de la souris est assez simple, que ce
> soit via les attributs HTML

assez simple ... assez simple ... c'est quand même un peu vite dit :
<http://www.quirksmode.org/js/findpos.html>
<http://www.quirksmode.org/dom/w3c_cssom.html#mousepos>



Euh... :))



--
Concours de bit entre linuxiens : hcgvzr
Hugo (né il y a 1 388 766 783 secondes)
Avatar
Hugolino
Le Sat, 26 Apr 2008 13:48:29 +0200, SAM a écrit:
Hugolino a écrit :
> Dans un TP, <http://urlalacon.com/B2eh1o> j'ai besoin que mes élèves
> analysent des jpeg extraits d'une vidéo. J'aurais besoin que s'affiche
> dans le navigateur la position de la souris (en pixels).
>
> Est-ce que seul un langage de script comme javascript permettrait de
> faire ça,

oui

> Parce que javascript, j'y connais rien :/

Il n'est pas trop tard pour s'y mettre :-)



Je ne demande qu'à apprendre (pour un prof, le contraire serait pour le
moins incohérent :) , mais il va falloir me guider un peu.

à mettre dans le head du fichier :
(pas certain que mes axes x et y soient les bons ...!)

<script type="text/javascript">
var posx, posy, k;
function MouseCatch(e, px2mm) {
// px2mm est le facteur de conversion pixels --> mm
// relatif à l'image cliquée
posx = e.offsetX ? e.offsetX : e.clientX-e.target.x;
posy = e.offsetY ? e.offsetY : e.clientY-e.target.y;
posx = Math.round(posx * px2mm);
posy = Math.round(posy * px2mm);
window.status='X: '+posx+'mm - Y: '+posy+'mm';
return true;
}
function key(evt) { k = (evt && evt.shiftKey); }
function coords(exo) {
exo = exo.id;
exo += k? '_point_2_' : '_point_1_';
document.monForm[exo+'x'].value = posx;
document.monForm[exo+'y'].value = posy;
}
</script>



OK, ça j'ai fait, mais quand je clique sur l'image, il provoque une
erreur (j'ai installé FireBug), ça dit:
8<-----------8<---------8<----------8<----------8<----------8<----------8<
document.monForm has no properties
[Break on this error] document.monForm[exo+'x'].value = posx;
8<-----------8<---------8<----------8<----------8<----------8<----------8<
à la ligne 109 de mon pit-show.php, soit la ligne "function coords(exo) {"
de ton code javascript
A quoi cela est-il du ? comment corriger ?

et pour le truc bazar, dans le body :

<form action="rapport.php" method="post">



Je ne souhaite pas que mon serveur récupère les données du formulaire
(il faut bien que les élèves travaillent un peu :)
<input type="hidden" value="TP_001">
<h3><u>Clic</u> pour repérer le 1er point et
<u>Majuscule + clic</u> pour le 2ième point :</h3>
<p><img src="exo_001.jpg" id="exo_001"
onmousemove="MouseCatch(event, 0.256);"
onclick="key(event); coords(this);"><br>



Est-il indispensable que l'image soit dans le formulaire ?

Point 1 :
x = <input size=6 name="exo_001_point_1_x">
y = <input size=6 name="exo_001_point_1_y"><br>
Point 2 -
x = <input size=6 name="exo_001_point_2_x">
y = <input size=6 name="exo_001_point_2_y">
</p>



Mon index de vignette appelle pict-show.php en lui passant le nom de
l'image à affcher en argument. Il n'y a qu'une seule image à analyser à
chaque fois, je n'ai donc inclus dans mon code que ce qui est ci-dessus.

> Tant qu'à faire, si javascript est requis, il faudrait qu'ils puissent
> cliquer deux points particuliers de la photo pour que les pixels soit
> convertis en millimètre. (parce que je connais la distance entre ces
> deux points qui se déplacent sur les photos).

mieux vaudrait connaitre le rapport width en px / width en mm de l'image



La pièce en plastique fait 20mm par 30mm, donc 36mm de diagonale, je
souhaiterais que mon javascript calcule donc le rapport pixel/mm puis
un fois que c'est fait, qu'il affiche aussi les coordonnées de la souris
en mm par rapport au coin supérieur gauche de la photo, afin que l'élève
connaisse la position de la pièce.
Je ne peux pas donner l'échelle de la photo, car la webcam était situé à
50 cm du plan de travail, maias il y a 10 cm d'eau dans le
cristallisaoir et je dois compter avec la parallaxe.

> D'ailleurs puisque je ne connais rien à javascript, est-ce qu'il n'y
> aurait pas maintenant un langage coté client plus évolué/facile/puissant
> que javascript, ou est-ce devenu un standard incontournable ?

côté client il n'y a que le JS



OK, il va donc falloir s'y mettre.

éventuellement un applet en JAVA ?



Quelle horreur !! :)

(voir si google n'a pas ça en stock ?)



Avec toutes les horreurs qu'on peut y trouver, certainement.


Merci (à toi et aux autres contributeurs)

--
Passe que moi, au départ, j'avais fait informatique comme études, pas
NT, et je voudrais revenir à mon métier premier.
Hugo (né il y a 1 388 768 445 secondes)
Avatar
Hugolino
Le Sat, 26 Apr 2008 11:56:50 +0200, Guy Gruais a écrit:
Bonjour,

Vous allez être infiniment heureux d'apprendre que Hugolino vient d'écrire
:

> J'aurais besoin que s'affiche dans le navigateur la position de la
> souris (en pixels).

Dans google, je viens de taper "position de la souris dans une page" et
j'obtiens ceci :

http://www.google.com/search?q=position+de+la+souris+dans+une+page&sourceid=ie7&rls=com.microsoft:en-US&ie=utf8&oe=utf8

Yapuka ... ... faire le tri



Oops!
<plates excuses>
Marrant comment je peux oublier de googliser alors que je suis sur le
web au moins 4 heures par jour...
</plates excuses>


--
la plupart des automobilistes n'ont aucune idée de comment fonctionne
une moto


Si : trop vite, et en faisant trop de bruit.
Hugo (né il y a 1 388 759 135 secondes)
1 2 3 4 5