Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wywoływaniem tej samej funkcji dla kilku obiektów.
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
DarK MaN
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <TITLE> Test </TITLE>
  3. <script LANGUAGE="JavaScript">
  4. <!--
  5. //Przechowuje liczbę obiektów którym zostały nadane nazwy
  6. numerId=0;
  7. //Tablica ze stanami obiektów
  8. nr = new Array;
  9. //Identyfikatory cyklicznie wywoływanych czynności
  10. timerIdU = new Array;
  11. timerIdD = new Array;
  12.  
  13.  
  14. //Zwraca id obiektu. Jeśli obiekt nie ma id nadaje mu go.
  15. function nadajId(whoa)
  16. {
  17. if(whoa.id=='')
  18. {
  19. whoa.id = "divnr"+numerId;
  20. numerId++;
  21. return whoa.id;
  22. }
  23. else
  24. return whoa.id;
  25. }
  26.  
  27.  
  28. function wielkrotnik(akcja)
  29. {
  30.  
  31. document.getElementById(ident).childNodes[0].data = nr[ident];
  32. if(akcja=='zwieksz')
  33. {
  34. //Jeśli wartość dojdzie do 30 przestaje zwiększać
  35. if(nr[ident]==30)
  36. clearInterval(timerIdU[ident]);
  37. else
  38. nr[ident]++;
  39. }
  40. else
  41. {
  42. //Jeśli wartość dojdzie do 1 przestaje zmniejszać
  43. if(nr[ident]==1)
  44. clearInterval(timerIdD[ident]);
  45. else
  46. nr[ident]--;
  47. }
  48.  
  49. }
  50.  
  51. //Zmienia wartość podanego obiektu zależnie od akcji
  52. function zmienWartosc(obiekt, akcja)
  53. {
  54. //Pobiera id obiektu
  55. ident = nadajId(obiekt);
  56.  
  57. //Jeśli obiekt nie ma jeszcze wartości nadaje mu ja
  58. if(nr[ident]==undefined)
  59. nr[ident] = 1;
  60.  
  61. //Rozpoczyna zwiększać wartość obiektu
  62. if(akcja=='wgore')
  63. {
  64. //Przestaje zmniejszać wartość obiektu (jeśli zmniejszała się tongue.gif)
  65. clearInterval(timerIdD[ident]);
  66. timerIdU[ident] = setInterval("wielkrotnik('zwieksz')", 10);
  67. }
  68. //Rozpoczyna zmniejszać wartość obiektu
  69. else
  70. {
  71. //Przestaje zmniejszać wartość obiektu (jeśli zwiększała się tongue.gif)
  72. clearInterval(timerIdU[ident]);
  73. timerIdD[ident] = setInterval("wielkrotnik('zmniejsz')", 10);
  74. }
  75.  
  76. }
  77.  
  78.  
  79. //-->
  80. </HEAD>
  81.  
  82. <DIV style="background-color:#00FFFF; width:100px; height:100px;" onMouseOver="zmienWartosc(this, 'wgore')" onMouseOut="zmienWartosc(this, 'wdol')">&nbsp;</DIV>
  83. <br><br>
  84. <DIV style="background-color:#00FFFF; width:100px; height:100px;" onMouseOver="zmienWartosc(this, 'wgore')" onMouseOut="zmienWartosc(this, 'wdol')">&nbsp;</DIV>
  85.  
  86. </BODY>
  87. </HTML>


Po najechaniu na dany obiekt (DIV) jego wartość ma się zwiększyć do 30 a po opuszczeniu obiektu ma się zmniejszyć do 1. Wszystko działa dobrze do momentu przejechani z jednego obiektu na drugi zanim zakończy się zmniejszanie wartości tego pierwszego. Wtedy dochodzi do zawiechy. Co morze być tego powodem?
LBO
hmmm... nie jestem pewien, ale moze zmienna ident jest "za globalna"... fwielokrotnik() pobiera ja ze srodowiska, a tutaj nie da sie ukryc za kazdym wywolaniem zmienWartosc() ident jest modyfikowane (mowie tutaj o zdarzeniu onMouseOver, onMouseOut na innym, niz wlasnie inkrementujacy/dekrementujacy obiekt)...

nie moge Ci teraz pomoc, bo siedze w robocie, ale jezeli dojdziesz do czegos daj tu wyniki, bo projekt calkiem ciekawy, pozdrawiam smile.gif

edit:
do tych wszystkich nr'ow, timerow itp sproboj zrobic obiektya nie tablice
DarK MaN
Obiekty? Nie bardzo wyobrażam sobie jak to ma wyglądać.
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.