div surperposées et onMouseOver

div surperposées et onMouseOver - HTML/CSS - Programmation

Marsh Posté le 29-04-2008 à 19:21:21    

Bonsoir,
 
Je suis en train de faire un librairie js qui reproduit le comportement de l'explorateur Windows (XP). Tout allait bien jusqu'à ce que je tente d'implémenter le glisser/déposer.
J'ai fait un truc à ma sauce qui crée une div reproduisant l'affichage du dossier qu'on veut glisser (avec transparence toussa). Cette div est d'abord positionnée au même endroit que le dossier source puis, suit le curseur bien sûr (comme dans l'explorateur quoi).
Le problème : Pour connaitre la destination je voulais utiliser les évènements onMouseOver et onMouseOut sur les div des dossiers (genre : c'est moi qui ai choper le ballon je valorise une variable globale à mon_id) . MAIS, parce qu'il y a un mais, ces connar*s d'évènements ne veulent pas se déclencher car ils sont "capter" (je pense) par la div copie qui se trouve fatalement entre le curseur et la div réceptrice.  
Une des solution c'est de créer la div copie légèrement décalée avec le curseur mais c'est moins beau (au moment ou on "prend" le dossier on voit un truc apparaître ailleurs, c'est moins classe).
 
La question : Comment faire en sorte que les événements des div sous ma copie se déclenchent ?
 
Contrainte : C'est du code destiné uniquement à I.E. (6 aujourd'hui). (C'est pas ma faute hein, c'est au boulot)  
 
Merci d'avance.

Reply

Marsh Posté le 29-04-2008 à 19:21:21   

Reply

Marsh Posté le 30-04-2008 à 14:21:17    

Je ne vois que trois explications possibles à votre absence de réponse :
1. Je sens mauvais du clavier.
2. Mon problème n'est pas suffisamment clair.
3. J'aurais pas dû poser ma question sur un forum de noobs ( :o )

 

PS : Dites moi 2, au moins, ça me laisserait de l'espoir. Là j'ai choisi l'option qui marche mais moins classe.


Message édité par Bob2024 le 30-04-2008 à 14:21:45
Reply

Marsh Posté le 30-04-2008 à 14:37:37    

http://www.quirksmode.org/js/events_order.html


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 30-04-2008 à 15:54:48    

Merci de participer à mon désarroi.

 

Bin, justement, j'avais d'abord lorgné de ce coté là mais j'ai l'impression que la propagation concerne les éléments imbriqués les dans les autres. Dans mon cas, il s'agit d'un élément de position "absolute" au z-index supérieur qui se retrouve à un instant t au dessus (et encore, à moitié) au dessus des div censé récupéré l'évènement => aucun lien de parenté.


Message édité par Bob2024 le 30-04-2008 à 15:55:34
Reply

Marsh Posté le 30-04-2008 à 16:40:37    

J'ai voulu faire un exemple de code et j'ai avancé dans le bordel :
Essayez ça (si vous voulez hein)

Code :
  1. <head>
  2. </head>
  3. <body>
  4. <div style="position:absolute;width:50px;height:50px;left:110px;top:110px;border:1px solid red;" onmouseover="alert('coucou')">&nbsp;</div>
  5. <div style="position:absolute;width:70px;height:70px;left:100px;top:100px;border:1px solid green;background:transparent;">coucou</div>
  6. </body>


Si je mets un background non transprent : impossible de déclencher le onmouseover. En l'état, vous remarquerez qu'on peut s'introduire dans la div rouge par le texte dans déclencher le onmouseover, par les autres coin, non. Avec de la transparence (filter : alpha(opacity=40) ; ), le comportement change encore ...
Amusant, non ?

 

Du coup, moi je voudrais qu'il se déclenche tout le temps, même avec un fond blanc (IE merde la transparence sur un un fond transparent, c'est pas beau). Une idée ?


Message édité par Bob2024 le 30-04-2008 à 16:41:18
Reply

Marsh Posté le 30-04-2008 à 16:52:04    

Mouais, une autre solution serait de calculer toi même les positions de tes éléments en fonction des événements mousemove. Le coup du capture/bubble, j'ai le souvenir que c'est la merde avec IE. Calculer la position, c'est faisable, mais le code est à la limite du maintenable.
 
Si tu t'aventures la dedans, je te conseillerais de mettre çe code à part et d'utiliser dans le cas général un modèle d'événement par capture. Si dès fois que IE8 tiennent ses promesses et que ta boîte réalise que IE6 est une bouse de vache sec depuis bien longtemps, tu pourras virer ce code moisis sans le moindre remord.
 
Bon, c'est l'idée générale, faudra fouiller pour le détail.

Reply

Marsh Posté le 30-04-2008 à 16:59:21    

j'avais penser faire ça mais d'un ça me saoule de le coder, de deux ça sent le truc de merde qui va faire mouliner le moteur js (de merde) d'IE (les machines clientes peuvent très bien venir du siècle dernier et là ... c'est le drame). Pas d'autres solutions ?

Reply

Marsh Posté le 30-04-2008 à 17:19:02    

Avec scriptaculous, ça devrait marcher normalement ...
 
A la limite, teste avec scriptaculous et regarde dans le code ce qui se passe, pour voir la différence avec ton code ...

Reply

Marsh Posté le 30-04-2008 à 17:42:35    

Je me suis pas totalement tapé le code mais il semblerait que soit un detectage de position justement (ce que je veux pas). De plus, j'ai décidé (à tort) de ne pas utiliser prototype et j'ai grave utiliser des "for i in" dans des tableaux (c'est pas compatible, enfin, ça merde quoi) et ça me fait chier de changer maintenant.
Je crois que je vais garder le principe de la copie en bas à droite du curseur. Ca fait moins joli quand on prend l'objet mais c'est pas choquant (ça améliore la lisibilité même) et surtout, ça marche bien.
 
Merci à tous.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed