Souci en javascript avec un div : drag & drop !?

Souci en javascript avec un div : drag & drop !? - HTML/CSS - Programmation

Marsh Posté le 01-02-2006 à 20:51:06    

Bonsoir :)
 
Pour commencer, il faut dire que j'ai jamais vraiment fait de JavaScript ... donc ce que je fais est un peu à tatillon ! Dans le cas présent j'ai récupéré en grosse partie un script d'un site spécialisé ...  
 
Mon problème est le suivant : comme vous pouvez le voir sur http://www.zonehd.net/drag.php , on peut déplacer le div avec la souris. Vous l'avez sûrement remarqué, au premier mouvement, le div se décale tout seul ... ensuite plus de problème, il suit correctement le curseur !
 
Voici le code source au cas où (:D) :
 

Code :
  1. <html>
  2. <style type="text/css">
  3. .transparent {
  4. top:100px;
  5. left:100px;
  6. background-color:#cccccc;
  7. position:absolute;
  8. width:200;
  9. height:200;
  10. cursor:move;
  11. }
  12. .textetransp {
  13. color:#ffffff;
  14. text-decoration:none;
  15. filter: alpha(opacity=100);
  16. opacity:1;
  17. background-color:#336699;
  18. }
  19. </style>
  20. </html>
  21. <body>
  22. <script language="JavaScript1.2">
  23. <!--
  24. var ie=document.all;
  25. var nn6=document.getElementById&&!document.all;
  26. var isdrag=false;
  27. var x,y;
  28. var dobj;
  29. function movemouse(e)
  30. {
  31.   if (isdrag)
  32.   {
  33.  var X = tx - x;
  34.  var Y = ty - y;
  35. //alert(X+' '+Y);
  36. dobj.style.left = nn6 ? e.clientX + X : event.clientX + X;
  37. dobj.style.top  = nn6 ? e.clientY + Y : event.clientY + Y;
  38.    
  39. return false;
  40.   }
  41.  
  42. }
  43. function selectmouse(e)
  44. {
  45.   var fobj       = nn6 ? e.target : event.srcElement;
  46.   var topelement = nn6 ? "HTML" : "BODY";
  47.   while (fobj.tagName != topelement && fobj.className != "transparent" )
  48.   {
  49.     fobj = nn6 ? fobj.parentNode : fobj.parentElement;
  50.   }
  51.   if (fobj.className=="transparent" )
  52.   {
  53.     isdrag = true;
  54. // objet à déplacer
  55.     dobj = fobj;
  56. // espacement gauche de l'objet
  57.     tx = parseInt(dobj.style.left+0);
  58. // espacement droit de l'objet
  59.     ty = parseInt(dobj.style.top+0);
  60. // position x de la souris
  61.     x = nn6 ? e.clientX : event.clientX;
  62. // position y de la souris
  63.     y = nn6 ? e.clientY : event.clientY;
  64.     document.onmousemove=movemouse;
  65.     return false;
  66.   }
  67. }
  68. document.onmousedown=selectmouse;
  69. document.onmouseup=new Function("isdrag=false" );
  70. //-->
  71. </script>
  72. <div class="transparent" id="transp"><br />
  73. <font class="textetransp">Ceci est un essai</font> <br />
  74. <a href="#" onclick="document.getElementById('transp').style.visibility='hidden';">Fermer !</a></div>
  75. </body>
  76. </html>


 
Merci de votre aide par avance :)


Message édité par moon06 le 01-02-2006 à 20:54:18

---------------
- Si les cons volaient, il ferait nuit tout le temps ! -
Reply

Marsh Posté le 01-02-2006 à 20:51:06   

Reply

Marsh Posté le 01-02-2006 à 22:34:18    

[:moon06]


---------------
- Si les cons volaient, il ferait nuit tout le temps ! -
Reply

Marsh Posté le 02-02-2006 à 09:58:47    

euppe encore :)


---------------
- Si les cons volaient, il ferait nuit tout le temps ! -
Reply

Marsh Posté le 02-02-2006 à 11:22:18    

Hello,
 
je ne maîtrise pas vraiment à fond le sujet, mais vu qu'il faut que je m'y mette un jour je me suis un peu plongée dans ton code.
Vu le retour à la position 0 0 j'ai supposé qu'il n'arrivais pas à obtenir les coordonnées de départ. Pour une raison que j'ignore, il n'arrive pas à trouver le style.left et style.top depuis ton css (pour la suite ça joue vu qu'ils sont redéfinis dans le code). En plaçant les styles directement dans ta balise id "transp", là ça marche:
 
<div class="transparent" id="transp" style="{top:100px;left:100px;}>
 
En espérant que qqn apportera une explication un peu plus probante et peut-être uen solution moins "bricole" :)
 

Reply

Marsh Posté le 02-02-2006 à 11:27:27    

j'ai trouvé la solution quelques minutes avant ta réponse et c'est exactement ça :)
 
en fait apparemment il n'arrive pas à récupérer le top et le left s'ils sont définis dans le CSS et non "style=" .. :whistle:
 
merci Pitsy ;)


---------------
- Si les cons volaient, il ferait nuit tout le temps ! -
Reply

Sujets relatifs:

Leave a Replay

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