Javascript et POO

Javascript et POO - HTML/CSS - Programmation

Marsh Posté le 22-02-2007 à 02:08:55    

Bonjour,  
j'ai un problème avec la POO et Javascript... Je chercher à développer une classe qui me permettra ensuite de déplacer librement un élément HTML donné en paramètres.
 
La classe DragElement avec le constructeur et qq méthodes :

Code :
  1. // Constructeur
  2. var DragElement = function(elem)
  3. {
  4. this.element = elem;
  5. this.drag = false;
  6. this.mouseX = 0;
  7. this.mouseY = 0;
  8. this.element.onmousemove = this.move;
  9. this.element.onmousedown = this.dragStart;
  10. this.element.onmouseup = this.dragStop;
  11. }
  12. // Quand l'utilisateur clique sur l'élément, maintient le clic et bouge la souris pour effectuer le déplacement
  13. DragElement.prototype.move = function()
  14. {
  15.              // A faire
  16. }
  17. // Quand l'utilisateur clique sur l'élément (associé à l'évènement onmousedown)
  18. DragElement.prototype.dragStart = function()
  19. {
  20. alert(this.element);
  21. this.drag = true;
  22. this.mouseX = getCoordsMouseX();
  23. this.mouseY = getCoordsMouseY();
  24. }
  25. // Quand l'utilisateur relâche la souris (associé à l'év-ènement onmouseout)
  26. DragElement.prototype.dragStop = function()
  27. {
  28. this.drag = false;
  29. }
  30. // Positionne l'élément HTML
  31. DragElement.prototype.positionner = function(x, y)
  32. {
  33. this.element.style.top = y + 'px';
  34. this.element.style.left = x + 'px';
  35. }
  36. // Affiche l'élément HTML (par défaut, il ne l'est pas)
  37. DragElement.prototype.afficher = function()
  38. {
  39. this.element.style.display = 'block';
  40. }
  41. // N'affiche plus l'élément HTML à l'écran
  42. DragElement.prototype.fermer = function()
  43. {
  44. this.drag = false;
  45. this.element.style.display = 'none';
  46. }


 
Mon code HTML :  

Code :
  1. [...]
  2. <div id="box">
  3.     // trucs
  4. </div>


 
Et le code JS pour rendre l'élément 'box' draggable :

Code :
  1. var div = document.getElementById('box');
  2. box = new DragElement(div);
  3. box.afficher();
  4. box.positionner(100, 100);


 
Alors voilà, quand le constructeur est lancé, l'élément div est mémorisé dans this.element.  
 
Et le problème que je rencontre, c'est que quand je clique sur ma box (évènement onmousedown appelé, donc méthode dragStart() appelée en suivant le constructeur), this.element est 'undefined'. Il en va de même avec onmouseup et onmouseover :(
 
J'ai l'impression que les valeurs des propriétés ne sont pas gardées quand on affecte une fonction ou méthode par callback...
 
Quelqu'un peut'il m'éclairer sur ce problème ?  
 
Merci.

Reply

Marsh Posté le 22-02-2007 à 02:08:55   

Reply

Sujets relatifs:

Leave a Replay

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