Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Pinezki jak na NK
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
sebekzosw
Witam!
Zacząłem robić skrypt pinezek taki jak na nk (a przynajmniej podobny). Obecnie jestem na takim etapie:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  4. <meta name="author" content="sebekzosw" />
  5. <link href="css/style.css" rel="stylesheet" type="text/css" />
  6. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.js"></script>
  7. <script type="text/javascript">
  8. var move = false;
  9. var pin_id = 0, set = true;
  10. jQuery(document).ready(function()
  11. {
  12. $(document).mousemove(function(e)
  13. {
  14. if(move)
  15. {
  16. $('#pin_'+pin_id).css({'left':e.pageX+5+'px', 'top' : e.pageY+5+'px'});
  17. }
  18. });
  19.  
  20. $("#photo").click(function(e)
  21. {
  22. if(move)
  23. {
  24. var pos = $(this).position();
  25. pos.left = parseInt(pos.left);
  26. pos.top = parseInt(pos.top);
  27. var x = e.pageX - pos.left;
  28. var y = e.pageY - pos.top;
  29. move = false;
  30. $('<div></div>').css({
  31. 'position' : 'absolute',
  32. 'width' : '200px',
  33. 'height' : '200px',
  34. 'left' : x+35+'px',
  35. 'top' : y+35+'px',
  36. 'zIndex' : '0',
  37. 'backgroundColor' : 'white',
  38. 'border' : '1px solid black' }).attr('id', 'added_'+pin_id).html("Treść (maksymalnie 100 znaków):<br /><a href='' onclick='Usun(); return false;'>x</a><br /><textarea cols='20' rows='5'>"+x + ", " + y +"</textarea><input type='button' onclick='Zapisz(); return false;' value='Zapisz' />").appendTo('body');
  39. //alert();
  40. }
  41. return false;
  42. });
  43.  
  44. $("#pp").click(function(e)
  45. {
  46. if(pin_id == 0)
  47. {
  48. pin_id = new Date().getTime();
  49. move = true;
  50. set = true;
  51. var pos = $(this).position();
  52. pos.left = parseInt(pos.left);
  53. pos.top = parseInt(pos.top);
  54. var x = e.pageX - pos.left;
  55. var y = e.pageY - pos.top;
  56. $('<div></div>').css({
  57. 'position' : 'absolute',
  58. 'width' : '34px',
  59. 'height' : '34px',
  60. 'left' : x+'px',
  61. 'top' : y+'px',
  62. 'zIndex' : '2',
  63. 'background' : 'url(http://ba013.k12.sd.us/images/note2.gif) no-repeat'}).attr({'id' : 'pin_'+pin_id}).appendTo('body');
  64. }
  65. else if(pin_id != 0 && !set)
  66. {
  67. $('#pin_'+pin_id).remove();
  68. move = false;
  69. set = false;
  70. }
  71. return false;
  72. });
  73.  
  74. $('.complete').click(function(){
  75. alert('s');
  76. return false;
  77. });
  78. });
  79.  
  80. function Zapisz()
  81. {
  82. $('#added_'+pin_id).text('treść mojej pinezki').hide();
  83. $('#pin_'+pin_id).css({'zIndex' : '0'}).addClass('complete');
  84. pin_id = 0;
  85. set = false;
  86. move = false;
  87. }
  88.  
  89. function Usun()
  90. {
  91. $('#pin_'+pin_id).remove();
  92. $('#pin_'+pin_id).remove();
  93. pin_id = 0;
  94. set = false;
  95. move = false;
  96. }
  97. </script>
  98. </head>
  99.  
  100.  
  101. <img src="http://media2.pl/pliki/lech_kasa_promocja.jpg" id="photo" />
  102. <a href="lol.html" id="pp">Przypnij pinezke</a>
  103.  
  104. </body>
  105. </html>


Chciałem zrobić takie coś, że jak przypnę coś na zdjęciu, zapiszę to po najechaniu mi się wykona akcja pokazująca to co zapisałem. Jednak mam problem z $('.complete'). Powinno się po kliknięciu na ten element z klasą .complete (czyli jak pinezka została zapisana i przypięta, ta class jest dopisywana) wykonywać odpowiednie zadanie (w moim przypadku wyświetlić alert z napisem "s" ). Jednak nie działa mi to ;/ czym to jest spowodowane? Tym, że div ma pozycje absolutną? (wydaje mi się, że to bez znaczenia). Jeżeli zacznie mi się wyświetlać alert to wtedy będę mógł zrobić, że po najechaniu na to pokaże mi się div z moją treścią.
devnul
daj jakieś działające online demo bo tak to nawet mi się czytać tego kodu nie chce
sebekzosw
demo
devnul
nie działa bo odwołujesz się do istniejących elementów .complete i nie tworzysz nowego zdarzenia po przypięciu kolejnych pinezek. Żeby temu użyj live()
[JAVASCRIPT] pobierz, plaintext
  1. $('.complete').live("click",function(){
  2. alert('s');
  3. return false;
  4. });
[JAVASCRIPT] pobierz, plaintext

dzięki temu zdarzenie będzie działało w przeciwieństwie do bind() czy zdarzeń typu one(), albo click(), nie tylko na już stworzonych pinezkach ale także na tych które dodasz po deklaracji zdarzenia.
sebekzosw
dzięki wielkie - rzeczywiście pomogło, a ja zapomniałem o tej funkcji winksmiley.jpg

oto wersja poprawiona: demo
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.