Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS] Metoda obiektu do obsługi eventu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
DarK MaN
Mam prosty skrypt do obsługi drag & drop. Nie działa jeśli funkcja move odwołuje się do swojego obiektu poprzez "this". Jeśli robi to bezpośrednio za pomocą nazwy wszystko jest OK (wykomentowany kod). Co może być tego przyczyną?

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <STYLE type="text/css">
  3. .window_style
  4. {
  5. background-color: #66CCCC;
  6. border: 1px #000000 solid;
  7. position: absolute;
  8. width:100px;
  9. height:100px;
  10. }
  11. </STYLE>
  12.  
  13. <script LANGUAGE="JavaScript">
  14. <!--
  15.  
  16. function Draging()
  17. {
  18. //pozycja początkowa okna
  19. this.coordX = 0;
  20. this.coordY = 0;
  21.  
  22. //pozycja początkowa kursora
  23. this.offsetX = 0;
  24. this.offsetY = 0;
  25. //okno
  26. this.target = null;
  27.  
  28. //pobiera dane początkowe o oknie i kursorze
  29. this.drag = function drag(e, obj)
  30. {
  31. e = (e) ? e : window.event;
  32. this.target = obj;
  33. this.offsetX = e.clientX;
  34. this.offsetY = e.clientY;
  35. this.coordX = parseInt(this.target.style.left);
  36. this.coordY = parseInt(this.target.style.top);
  37. this.target.onmousemove = this.move;
  38. }
  39.  
  40. //przesuwa okno
  41. this.move = function move(e)
  42. {
  43.  
  44. e = (e) ? e : window.event;
  45.  
  46. this.target.style.left = this.coordX + e.clientX - this.offsetX + 'px';
  47. this.target.style.top = this.coordY + e.clientY - this.offsetY + 'px';
  48.  
  49. /*
  50. //odwołanie przez winDrag, this nie działa
  51. winDrag.target.style.left = winDrag.coordX + e.clientX - winDrag.offsetX + 'px';
  52. winDrag.target.style.top = winDrag.coordY + e.clientY - winDrag.offsetY + 'px';
  53. */
  54.  
  55. return false;
  56. }
  57.  
  58. //zaprzestaje przesuwania okna, czyści dane o obiekcie
  59. this.drop = function drop(e)
  60. {
  61. e = (e) ? e : window.event;
  62. this.target.onmousemove = null;
  63. this.target = null;
  64. this.offsetX = 0;
  65. this.offsetY = 0;
  66. this.coordX = 0;
  67. this.coordY = 0;
  68.  
  69. }
  70. }
  71.  
  72.  
  73. var winDrag = new Draging;
  74. //-->
  75. </SCRIPT>
  76. </HEAD>
  77.  
  78. <div id="win1" class="window_style" style="top:10px; left:50px" onMouseDown="winDrag.drag(event, this);" onMouseUp = "winDrag.drop()">Win1</div>
  79. </BODY>
  80.  
  81. </HTML>
Wiktor.
Cześć,
przyjrzałem się temu co napisałeś i sądzę, że problem to przypisanie funkcji move - zauważ, że przypisujesz ją jako eventHandler dla obiektu this.TARGET a nie this.

pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.