|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Inscrit
![]() Inscription : août 2004 Messages : 3 275 ![]() |
bonjour à tous,
J'ai un site avec une image de fond. Je veux dessiner des droites dessus. Et je voudrais que ces droites: 1/ changent de couleur quand le curseur de la souris passe dessus 2/ soient "cliquables", c'est à dire qu'une fonction javascript soit appelée quand l'utilisateur clique dessus. Je ne peux utiliser que du html, du javascript et du php. Comment faire? Par avance, merci. |
|
|
00
|
|
|
#2 | ||
|
Membre actif
![]() Inscription : août 2003 Messages : 159 ![]() |
Salut,
Citation:
Citation:
Le principe est là, il faut bien veiller a nommer differement chaque div créé, et aussi savoir que 1px pour un div sous IE c'est impossible mais ca se patche avec la propriété css clip. voilà voilà, je te dis tout ca puisque j'ai déjà fait un truc similaire (avec déplacement, magnetisme, redimentionnement, boites...) |
||
|
|
00
|
|
|
#3 | |||
|
Inscrit
![]() Inscription : août 2004 Messages : 3 275 ![]() |
ouch, ya du boulot!! Je pensais que ce serais plus simple, mais soit! Au boulot
![]() Citation:
Citation:
Code :
<div onMouseOver="javascript:mafonctionMouseOver" onClick="javascript:mafonctionOnClick"> Citation:
|
|||
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : août 2003 Messages : 159 ![]() |
Si tu n'a pas a dessiner a la main, ca sera tout de suite bien plus simple.
Oui, on peut creer un div (ou tout element html) et y attacher des evenements, il y a plusieurs facons de le faire, perso j'utilise le modele dom : Code :
element.addEventListener("mouseover", tafonction, false);
Code :
element.attachEvent("onmouseover", tafonction);
Bien sur, on peut meme attacher plusieurs evenements sur un objet. Pour l'histoire de 1px, j'ai jammais reussit a faire un div d'1px de hauteur sous IE, le minimum étant 2. La propriété clip permet de cacher une partie d'un objet, je crée donc un "cache" qui masque le pixel en trop. Par contre, comptes-tu creer des lignes diagonales ? dans ce cas galere galere, ca revient a creer chaque point avec un div équivalent et donc calculer leur position, sans compter la gestion d'evenement presque impossible... Il existe une librairie pour creer des lignes horizontales (entre autres) : http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm |
|
|
00
|
|
|
#5 |
|
Inscrit
![]() Inscription : août 2004 Messages : 3 275 ![]() |
erf, oui j'ai besoin de faire des diagonales...
est-ce qu'on peut superposer des div? Si c'est possible, je crée un div pour chaque ligne, la ligne étant la diagonale du div. Quand on clique sur un div, je récupère les coordonnées du curseur. Je peux donc avoir plusieurs div qui sont cliqués en même temps. Il me reste à calculer lequel est le bon. Tu vois ce que je veux dire? P.S: il faut je qu'y aille, je continuearis ça demain. Encore
|
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Inscription : août 2003 Messages : 159 ![]() |
Oui, il est possible de faire un div transparent recouvrant une diagonale, le probleme, c'est qu'il risque de recouvrir d'autres lignes en dessous et de piquer leur evenement. Peut etre est-ce corrigeable en utilisant l'"event bubbling", je m'ettalerais pas trop dessus, je n'ai jammais réellement experimenté, je te renvoie ici : http://gilles.chagnon.free.fr/cours/dhtml/evenements.html
Il faudrat penser aussi, pour le survol, si tu veux changer de couleur, actualiser tous les divs de la diagonale... Bref, bon courage ps: je pense tout a coup a l'attribut clip qui en plus de cacher des parties, anule les evenements sur les parties cachées -a verifier-... ca pourait etre une piste. |
|
|
00
|
|
|
#7 |
|
Inscrit
![]() Inscription : août 2004 Messages : 3 275 ![]() |
comment récupère-t-on la position du curseur au moment du clic?
par ex. j'ai un div: Code :
<div style="..." onclick=javascript:mafonction();> |
|
|
00
|
|
|
#8 | ||||
|
Membre actif
![]() Inscription : août 2003 Messages : 159 ![]() |
Pour netscape/mozilla :
Code :
Code :
|
||||
|
|
00
|
|
|
#9 | |
|
Inscrit
![]() Inscription : août 2004 Messages : 3 275 ![]() |
Citation:
|
|
|
|
00
|
|
|
#10 |
|
Membre actif
![]() Inscription : août 2003 Messages : 159 ![]() |
En effet, il me semblait ne pas etre tres clair !
A l'appel de la fonction, tu ne met rien justement, l'objet event est passé implicitement, par contre, je ne sais plus pour quelle raison obscure, pour mozilla/netscape tu doit le déclarer comme je te l'ai montré sinon, il te dira qu'il n'est pas définit (alors que tu n'a pas a le passer a l'appel !). De plus, ca marche bien de cette facon, avec la maniere de lier les evenements que je t'ai montré plus haut, mais mis directement dans la balise, je ne peut te garantir que le comportement soit le même. |
|
|
00
|
|
|
#11 | ||||
|
Inscrit
![]() Inscription : août 2004 Messages : 3 275 ![]() |
ça ne marche pas (je suis sous netscape)
voici ma fonction: Code :
Code :
J'ai également essayé avec window.event, et idem: window.event has no properties (j'obtiens ces messages d'erreurs dans la console javascript de netscape) |
||||
|
|
00
|
|
|
#12 | ||
|
Membre actif
![]() Inscription : août 2003 Messages : 159 ![]() |
Comme je t'ai dit, la gestion d'evenement depuis la balise risque d'etre differente, met plutot :
Code :
|
||
|
|
00
|
|
|
#13 | ||
|
Inscrit
![]() Inscription : août 2004 Messages : 3 275 ![]() |
erf, ça ne marche pô non plus:
Code :
Code :
<div id="div2" style="position:absolute; left:100px; top:100px; rigth:200px; bottom:100px; z_index:10"> |
||
|
|
00
|
|
|
#14 | ||
|
Membre actif
![]() Inscription : août 2003 Messages : 159 ![]() |
C'est normal, dans ton test, au moment du script, le div n'existe pas encore (il est plus bas dans la page), il faut mettre cette partie :
Code :
|
||
|
|
00
|
|
|
#15 |
|
Inscrit
![]() Inscription : août 2004 Messages : 3 275 ![]() |
ok nikel ça marche.
![]() |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com