Délimiter une zone [Javascript] - HTML/CSS - Programmation
Marsh Posté le 03-01-2007 à 13:40:42
mets deux divs dedans chacun avec un handler de click différent
Marsh Posté le 03-01-2007 à 13:49:50
J'ai commencé par là, mais ça me génère d'autre problème. La solution la plus simple semblait être de ne faire qu'un seul calque avec 2 sones réactives.
Mais j'ai l'impression que c'est un peu complexe, je vais essayer de résoudre l'autre problème.
Marsh Posté le 03-01-2007 à 13:56:22
Code :
|
Edit: de tête hein, donc je garantis rien
Edit2: les onclicks comme ça c'est un peu dégueux faudrait le faire proprement
Marsh Posté le 03-01-2007 à 14:37:56
Merci anpajari,
Je vous expose le problème :
http://yearbook.bepimaco.fr/administration/acces.php
Lorsque la souris survole le point en début de chaque ligne, plusieurs icônes apparaissent. En l'occurence il y en a 2 : éditer ou supprimer la fiche.
La méthode utilisée est la modification du DOM en javascript. Un évènement onmouseover déclenche une fonction Javascript qui ajoute un DIV. A l'inverse un évènement onmouseover supprime le DIV.
Jusque là aucun problème, et j'ai la structure suivante :
Code :
|
Par contre, je ne peux pas différencier l'un et l'autre bouton
Il suffit alors de rajouter 2 images à l'intérieur
Code :
|
Mais là, le problème vient du fait que lorsque la souris passe sur une image, il considère que je sors du div boite, et ça génère une erreur.
[EDIT] dans la page en lien, le premier bloc utilise la technique n°2, les 3 suivant la technique n° 1.
Marsh Posté le 03-01-2007 à 16:48:24
Bon alors d'abord, la structure de ton document html est pas terrible terrible et pareil pour tes css
C'est pas parce qu'on dit partout que les tableaux c'est le mal que lorsque tu as besoin de faire une tableau il faut que tu le fasses avec des div/p en floatant, ça c'est pas une bonne idée du tout!
Et puis même pourquoi prendre des p pour les rendre floatant? Un span ne suffisait pas?
Pour tes css, un petit truc qui te simplifiera la vie tu peux donner plusieurs classes à un noeud comme ça:
Code :
|
ça t'evitera les rédondances à la con sur ligne0 et ligne1 par exemple.
Maintenant pour en revenir à ton problème js, pareil c'est pas génial comme tu fais. Créer/Détruire des noeuds à chaque fois c'est super gourmant et ça sert à rien.
Voila un petit truc qui devrait marche un peu mieux, avec des commentaires en dessous:
Code :
|
Donc pour que ça marche avec ton truc vire tous les onmouseover sur les images et rouler-jeunesse ( en théorie).
Maintenant 2/3 trucs:
Marsh Posté le 03-01-2007 à 23:59:47
Merci beaucoup anapajari.
Etant débutant en Javascript, j'ai mis un peu de temps à comprendre tout le code. Mais je pense avoir compris le principe.
Reste quelques zones d'ombres.
- J'ai essayé de changer le handler pour l'affecter à l'image, mais malgré toutes mes tentatives, rien ne fonctionne.
Mais à la limite, ce n'est pas le plus important.
Le nouveau DIV se place directement de le BODY, et s'il est bien à la bonne hauteur (IE + Firefox), il est en revanche à gauche de l'écran. J'ai essayé d'affecter le DIV créé à l'intérieur du DIV principal, mais rien ne marche.
J'ai l'impression que les 2 questions sont liées ... comment changer l'affectation des évènement ?
Merci beaucoup, je pense avoir pas mal progressé ce soir !
Marsh Posté le 04-01-2007 à 00:08:57
Pour la position horizontal, j'ai trouvé ; il suffit de jouer avec les DIV. Ca plante encore avec IE, mais je devrais régler la solution.
Marsh Posté le 04-01-2007 à 09:28:41
quand je parlais du handler on est bien d'accord que j'évoquais le :
Code :
|
Et quand tu modifies ça, ça marche pas ?
Le lien d'en haut est toujours bon pour vérifier?
Marsh Posté le 04-01-2007 à 13:15:30
Il y a un problème ici
Code :
|
Plus particulièrement à la ligne 7
La boucle for passe en revue toutes les images de imgListe. Ce qui fait que lorsque la fonction (e) (ligne 6) est appelée, l'image en mémoire est la dernière. Donc, quelque soit l'image cliquée sur la page, ce sont les attributs de la dernière image qui sont pris en compte.
J'ai teté en remplacant eval(imgList[img]['onclick'] par eval(imgList[0]['onclick'], et c'est effecitvement de là que vient le problème. J'ai essayé pas mal de truc (d'où le changement des noms de variables !) Mais j'en reviens toujours au même point.
Marsh Posté le 04-01-2007 à 13:23:00
yep c'est normal j'ai fait ça un peu trop vite.
Alors explication: le eval est effectué au moment du onclick sur le noeud, donc le 'img' pris est celui de la dernière itération et ça pouvait pas marcher.
Pour corriger, change les lignes 5 à 8 en:
Code :
|
et ça devrait rouler
Marsh Posté le 04-01-2007 à 13:33:05
Merci beaucoup. Ca marche effectivement très bien.
J'essaie de comprendre tout ça, mais c'est un peu nouveau. En tout cas, j'avance grâce à vous.
Marsh Posté le 06-01-2007 à 20:13:05
Bonsoir,
Si je résume le fonctionnement de la "Bubble" :
Pour pouvoir changer une des images, j'ai créé un second objet.
Le problème, c'est que je n'arrive pas à atteindre les méthodes, hors de la classe roulette. Pour être précis, je n'arrvei pas à "l'effacer". Avez-vous une idée ?
http://yearbook.bepimaco.fr/administration/acces.php
En visitant le lien et en parcourant la page vous comprendrez vite le problème.
Ce n'est pas vraiment un problème. Mais je voudrais vraiment comprendre comment tout interagit ... bref, c'est plus pour approfondir le sujet plus que pour le résultat de cette page.
Merci
Marsh Posté le 08-01-2007 à 09:48:25
bepimaco a écrit : Bonsoir,
|
C'est à peu près ça oui.
Pour l'affichage en fait c'est le noeud sur lequel a eu lieu l'event plutot que la hauteur de la ligne mais ça revient effectivement au même.
bepimaco a écrit : Pour pouvoir changer une des images, j'ai créé un second objet. |
Tu as fait un autre new Bubble donc?
bepimaco a écrit : Le problème, c'est que je n'arrive pas à atteindre les méthodes, hors de la classe roulette. Pour être précis, je n'arrvei pas à "l'effacer". Avez-vous une idée ? |
Pour accèder aux méthodes d'un objet il faut faire:
Code :
|
Marsh Posté le 03-01-2007 à 12:28:51
Bonjour,
J'ai un div de 100px de large que je vourais diviser en 2 : si on clique à gauche ça déclenche x, (et y pour la droite). Est-ce faisable ?
Benjamin