Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Général Conception Web > Webdesign & Ergonomie
Webdesign & Ergonomie Forum d'entraide Webdesign & Ergonomie : les bonnes pratiques de conception des sites web
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/03/2005, 17h50   #1
r0d
Inscrit
 
Inscription : août 2004
Messages : 3 275
Détails du profil
Informations personnelles :
Localisation : Espagne

Informations forums :
Inscription : août 2004
Messages : 3 275
Points : 3 422
Points : 3 422
Par défaut dessiner des lignes "cliquables"

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.
r0d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2005, 18h08   #2
Membre actif
 
Avatar de doof
 
Inscription : août 2003
Messages : 159
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 159
Points : 153
Points : 153
Salut,
Citation:
J'ai un site avec une image de fond. Je veux dessiner des droites dessus.
Alors déjà, il faut faire une zone "sensible" (l'aire de dessin) aux clicks de souris, donc y attacher des evenements onmousedown et onmouseup et reperer constament les coordonnées de la souris bien sur. A partir de là, au moindre signal onmousedown, tu crée un div de 1*1 a l'emplacement de la souris, puis au deplacement, tu le redimentionne constament.
Citation:
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.
des qu'un signal onmouseup est recu, tu ajoute des guetteurs d'evenement sur les objets créés : 1 onmouseover en attachant une fonction qui le change de couleur et 1 onmousedown qui appelle une fonction que tu veux...

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...)
doof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2005, 18h21   #3
r0d
Inscrit
 
Inscription : août 2004
Messages : 3 275
Détails du profil
Informations personnelles :
Localisation : Espagne

Informations forums :
Inscription : août 2004
Messages : 3 275
Points : 3 422
Points : 3 422
ouch, ya du boulot!! Je pensais que ce serais plus simple, mais soit! Au boulot , et avant tout

Citation:
Envoyé par doof
Alors déjà, il faut faire une zone "sensible" (l'aire de dessin) aux clicks de souris, donc y attacher des evenements onmousedown et onmouseup et reperer constament les coordonnées de la souris bien sur. A partir de là, au moindre signal onmousedown, tu crée un div de 1*1 a l'emplacement de la souris, puis au deplacement, tu le redimentionne constament.
en fait, mes droites doivent être générées par une fonction (javascript ou php) en fonction d'une base de donnée. Ce n'est pas l'utilisateur qui doit créer ces droites.
Citation:
Envoyé par doof
des qu'un signal onmouseup est recu, tu ajoute des guetteurs d'evenement sur les objets créés : 1 onmouseover en attachant une fonction qui le change de couleur et 1 onmousedown qui appelle une fonction que tu veux...
tu veux dire qu'on peut créer un div sensible à la souris? Un truc comme:
Code :
<div onMouseOver="javascript:mafonctionMouseOver" onClick="javascript:mafonctionOnClick">
c'est possible?
Citation:
Envoyé par doof
1px pour un div sous IE c'est impossible mais ca se patche avec la propriété css clip.
euh, je comprends rien là Qu'entends-tu par "ça se patche", et qu'est-ce que la propriété css clip? (je l'avais dit, je suis nul en dev web )
r0d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2005, 18h38   #4
Membre actif
 
Avatar de doof
 
Inscription : août 2003
Messages : 159
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 159
Points : 153
Points : 153
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);
bien sur, IE ne le comprends pas, il faut faire :
Code :
element.attachEvent("onmouseover", tafonction);
Et donc reconaitre avant tout IE.
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
doof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2005, 18h47   #5
r0d
Inscrit
 
Inscription : août 2004
Messages : 3 275
Détails du profil
Informations personnelles :
Localisation : Espagne

Informations forums :
Inscription : août 2004
Messages : 3 275
Points : 3 422
Points : 3 422
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
r0d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2005, 18h57   #6
Membre actif
 
Avatar de doof
 
Inscription : août 2003
Messages : 159
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 159
Points : 153
Points : 153
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.
doof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2005, 11h29   #7
r0d
Inscrit
 
Inscription : août 2004
Messages : 3 275
Détails du profil
Informations personnelles :
Localisation : Espagne

Informations forums :
Inscription : août 2004
Messages : 3 275
Points : 3 422
Points : 3 422
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();>
que dois-je mettre dans mafonction() pour récupérer cette position?
r0d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2005, 16h00   #8
Membre actif
 
Avatar de doof
 
Inscription : août 2003
Messages : 159
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 159
Points : 153
Points : 153
Pour netscape/mozilla :
Code :
1
2
X = event.clientX + window.scrollX;
Y = event.clientY + window.scrollY;
Pour le reste :
Code :
1
2
X = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
Y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
event doit etre passé implicitement en argument de fonction mais il faut le declarer dans la déclaration de ta fonction :
Code :
1
2
3
4
mafonction(event) {
..
..
}
doof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2005, 17h04   #9
r0d
Inscrit
 
Inscription : août 2004
Messages : 3 275
Détails du profil
Informations personnelles :
Localisation : Espagne

Informations forums :
Inscription : août 2004
Messages : 3 275
Points : 3 422
Points : 3 422
Citation:
Envoyé par doof
event doit etre passé implicitement en argument de fonction mais il faut le declarer dans la déclaration de ta fonction :
Code :
1
2
3
4
mafonction(event) {
..
..
}
en fait, c'est ça que je ne comprends pas: que dois-je passer en paramètre pour l'appel de mafonction? Que représente ce event? Que veux-tu dire par "être passé implicitement"?
r0d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2005, 17h45   #10
Membre actif
 
Avatar de doof
 
Inscription : août 2003
Messages : 159
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 159
Points : 153
Points : 153
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.
doof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2005, 18h19   #11
r0d
Inscrit
 
Inscription : août 2004
Messages : 3 275
Détails du profil
Informations personnelles :
Localisation : Espagne

Informations forums :
Inscription : août 2004
Messages : 3 275
Points : 3 422
Points : 3 422
ça ne marche pas (je suis sous netscape)
voici ma fonction:

Code :
1
2
3
4
5
6
function fnToto(event)
{
	X = event.clientX + window.scrollX; 
	Y = event.clientY + window.scrollY;
	alert(X);
}
qui est appelée par:
Code :
1
2
<div id="div2" style="position:absolute; left:100px; top:100px; rigth:200px; bottom:100px; z_index:10" onclick="javascript:fnToto();">
<!--avec une image et tout ce qu'il faut après-->
L'erreur est: event has no properties.

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)
r0d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2005, 18h29   #12
Membre actif
 
Avatar de doof
 
Inscription : août 2003
Messages : 159
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 159
Points : 153
Points : 153
Comme je t'ai dit, la gestion d'evenement depuis la balise risque d'etre differente, met plutot :
Code :
1
2
e = document.getElementById('div2');
e.addEventListener("mousedown", fnToto, false);
et rien dans la balise.
doof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2005, 19h35   #13
r0d
Inscrit
 
Inscription : août 2004
Messages : 3 275
Détails du profil
Informations personnelles :
Localisation : Espagne

Informations forums :
Inscription : août 2004
Messages : 3 275
Points : 3 422
Points : 3 422
erf, ça ne marche pô non plus:
Code :
1
2
3
4
5
6
7
8
9
10
11
<html>
<title>Test click</title>
<head>
<script language="javascript">

e = document.getElementById('div2'); 
e.addEventListener("mousedown", fnToto, false);

function fnToto(event)
{
...
avec
Code :
<div id="div2" style="position:absolute; left:100px; top:100px; rigth:200px; bottom:100px; z_index:10">
-> erreur: e has non properties
r0d est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2005, 19h44   #14
Membre actif
 
Avatar de doof
 
Inscription : août 2003
Messages : 159
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 159
Points : 153
Points : 153
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 :
1
2
e = document.getElementById('div2'); 
e.addEventListener("mousedown", fnToto, false);
a la fin
doof est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2005, 15h02   #15
r0d
Inscrit
 
Inscription : août 2004
Messages : 3 275
Détails du profil
Informations personnelles :
Localisation : Espagne

Informations forums :
Inscription : août 2004
Messages : 3 275
Points : 3 422
Points : 3 422
ok nikel ça marche.


r0d est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h50.


 
 
 
 
Partenaires

Hébergement Web