Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]sprawdzic czy funkcja jest w danym momencie wykonywana
Forum PHP.pl > Forum > Przedszkole
Kamil Pietrzak
Witam,

mam na stronie funkcje wywolywana po kliknieciu i gdy uzytkownik kliknie drugi raz zanim funkcja skonczy sie wykonywac to calosc sie sypie
pasowaloby mi sprawdzic czy funkcja jest aktualnie wykonywana...
moze gdyby dalo sie jakos wyrzucic zmienna z funkcji, cos jak zmienna globalna tylko w druga storne, czy cos...
moze gdyby sie udalo tez zatrzymac w jakis sposob zmienna, tzn mam var zmienna2=zmienna1
gdy zmieni sie zmienna1 to zmieni sie i zmienna2, moze gdyby dalo sie jakos zatrzymac zmienna2, albo cokolwiek innego co mi pozwoli sprawdzic czy funkcja jest wykonywana
skowron-line
Jeżeli to link / button to zmień na disabled. A na koniec wykonywania funkcji daj znów możliwość kliknięcia.
Kamil Pietrzak
hm... pomysl wrecz idealny
tylko lipa z wykonaniem

porzucilem nawet proby z jsem i po prostu dalem do htmla
  1. <a disabled id="chImg_id1" href="java script:changeImage('date/signatures/madagascar.jpg', 'date/signatures/madagascar.jpg');" onclick="newImage='date/signatures/madagascar.jpg';">1</a>


link jest aktywny...

z tym co pisales nieudalo sie, z niewiadomych powodow nie moglem tez wyciagnac defaultValue, w koncu dalem tak, ze linki dalkiem znikaja na czas trwania funkcji biggrin.gif
skowron-line
To pokaż kod to Ci pokażemy co było nie tak, żebyś na przyszłość wiedział jak coś takiego zrobić.
Kamil Pietrzak
tutaj jest calosc
http://kpietrzak.boo.pl/gallery3/index.php...s&graphic=2
niezly syf, watpie aby udalo sie cos znalezc

raczej nalezaloby sie zastanowic np. dlaczego skrypt nie umial odzyskac defaultValue, nigdy wczesniej mi sie nie zdarzylo
Fifi209
[JAVASCRIPT] pobierz, plaintext
  1.  
  2. var status=false;
  3.  
  4. function test() {
  5. if (status == false) {
  6. status = true;
  7.  
  8. // skrypt
  9. }
  10. status=false;
  11. }
[JAVASCRIPT] pobierz, plaintext


Hmm, coś takiego?
Kamil Pietrzak
eee... chyba nie tongue.gif
zasieg zmiennej konczy sie wraz z klamerka funkcji, chyba, ze znasz sposob aby to ominac snitch.gif
Fifi209
Cytat(Kamil Pietrzak @ 1.02.2010, 21:22:08 ) *
eee... chyba nie tongue.gif
zasieg zmiennej konczy sie wraz z klamerka funkcji, chyba, ze znasz sposob aby to ominac snitch.gif

Przetestować samemu zamiast głupio pisać.
  1. <head>
  2. <script type="text/javascript">
  3. var status=false;
  4.  
  5. function test() {
  6. if (status == false) {
  7. status = true;
  8. // skrypt
  9. }
  10. alert(status);
  11. status=false;
  12. alert(status);
  13. }
  14.  
  15. test();
  16. </script>
  17. </head>
  18. <body>
  19. </body>
  20. </html>


SOA#1
Dziwne u mnie działa.
Kamil Pietrzak
  1.  
  2. <script type="text/javascript">
  3.  
  4. function test() {
  5. //gdy skrypt startuje
  6. ee = 0;
  7.  
  8. //skrypt pracuje... dlugo pracuje...
  9.  
  10. //gdy konczy
  11. ee = 1
  12.  
  13. }
  14. ee = 1
  15.  
  16. if(ee == 1) {
  17. test();} else {alert('skrypt jest zajety');}
  18.  
  19.  
  20.  
  21.  
  22. </script>
  23.  
  24. ale taka kontrukcja nie jest mozliwa, przed chwila sprawdzilem ;)
  25.  
  26.  
zegarek84
Cytat(Kamil Pietrzak @ 1.02.2010, 21:41:16 ) *
ale taka kontrukcja nie jest mozliwa, przed chwila sprawdzilem winksmiley.jpg

to źle sprawdzałeś ;p

wiele błędów w samym js widziałem i używasz eval ;p - wiem, napiszesz, że tak nie robisz ;p - choćby tu już jest eval: setInterval("changeSizeUp("+s3+");", 30); - jak poprawniej tego użyćquestionmark.gif choćby tak (ale na ie nie będzie działało - zaraz do tego też dojdę ;p): setInterval(changeSizeUp, 30, s3); ale ze względu na to IE musisz się ograniczyć do: setInterval(changeSizeUp, 30); - a co z przekazaniem parametru?? - a no poczytaj o zasięgu zmiennych w js, o zmiennych prywatnych i publicznych ;p ^^ i luknij na rozwiązanie problemu winksmiley.jpg

kod deczko sieczka u Ciebie ale jakoś się przekopałem winksmiley.jpg... w js zasięg zmiennych jest inny niż w php winksmiley.jpg - a jednocześnie js jest niezwykle mocno obiektowy - może kiedyś go zrozumiesz winksmiley.jpg...

i konstrukcja:
id2 = setInterval("changeSizeUp("+s3+");", 30); - gdzie wcześniej nigdzie nie zdefiniowałeś zmiennej id2 tworzy Ci zmienną globalnną którą łatwo będziesz mógł przez coś przypadkiem nadpisać (czyli zmienną pod window.id2)...

i stosuj na końcu zdań/instrukcji ten średnik ;p

zmniejszyłem interwał cobyś zobaczył, że działa ;p - ale całych funkcji nie poprawiałem ;p - zostawiam Ci to w ramach ćwiczeń poprawienie tego wg. uwag winksmiley.jpg - i jeszcze jedna uwaga - poczytaj o podpinaniu zdarzeń onclick i takie tam gdyż nie łądnie to w html'u teraz wygląda winksmiley.jpg - ale ważne, że działą ^^

btw. strona mi się podoba - może nie jest idealna ale chciałbym sam mieć zmysł grafika ;p (może wtedy "kodowanie" nie było by moim tylko hobbi ;p) - co z tego, że umiem uzyskać takie efekty jakie ktoś chce jeśli nie umiem tych efektów wymyślić ;p - jakoś w tej dziedzinie za mało kreatywny jestem...

ps. i fifi209 podał poprawne rozwiązanie - porównaj to ;p, a i rozwiązanie skowron-line w zasadzie też jest takie samo winksmiley.jpg - tyle, że zamiast zmiennej zmieniasz styl - jakby nie było gdzieś przechowujesz tą wartość choć tego w funkcji potem nie sprawdzasz ;p (i w zasadzie to Twoje teraz rozwiązanie było identyczne z sugestią skowron-line)
[JAVASCRIPT] pobierz, plaintext
  1. var zajete=false;
  2. //zmienne
  3. var image1_file1 = "date/signatures/madagascar.jpg";var image1_file2 = "date/signatures/madagascar.jpg";var image2_file1 = "date/signatures/madagascar2.jpg";var image2_file2 = "date/signatures/madagascar2.jpg";
  4. //zmniejsza obrazek
  5. function changeSizeDown(minS)
  6. {
  7.  
  8. if(s1>minS)
  9. {
  10. if(s1>100)
  11. {
  12. s1=s1-20
  13. document.getElementById('ImageImageImage').width = s1
  14. }
  15. else
  16. {
  17. s1=s1-10
  18. document.getElementById('ImageImageImage').width = s1
  19. }
  20. }
  21. else
  22. {
  23. document.getElementById('ImageImageImage').src = newImage;
  24. clearInterval(id);
  25. id2 = setInterval("changeSizeUp("+s3+");", 30);
  26.  
  27. }
  28. }
  29.  
  30. /* osnosnie komentarzy... bardziej pasuja do funkcji wyzej */
  31. function changeSizeUp(minS)
  32. {
  33. s1 = document.getElementById('ImageImageImage').width;
  34. //jesli aktualny rozmiar jest mniejszy niz zalecany minimalny
  35. if(s1<minS)
  36. {
  37. //jesli jeszcze nie doszedl do progu zwalniajacego...
  38. if(s1<s3-120)
  39. {
  40. s1=s1+20
  41. document.getElementById('ImageImageImage').width = s1
  42. }
  43. //natomiast jak do maksymalnego rozmiaru brakuje tylko 120px szerokosci to zmniejsza juz o 16px na kolejke, a nie jak normalnei o 20
  44. else
  45. {
  46. if(s1<s3-95)
  47. {
  48. s1=s1+16
  49. document.getElementById('ImageImageImage').width = s1
  50. }
  51. //kolejny prog zwalniajacy...
  52. else
  53. {
  54. if(s1<s3-70)
  55. {
  56. s1=s1+8
  57. document.getElementById('ImageImageImage').width = s1
  58. }
  59. else
  60. {
  61. if(s1<s3-30)
  62. {
  63. s1=s1+4
  64. document.getElementById('ImageImageImage').width = s1
  65. }
  66. else
  67. {
  68. s1=s1+2
  69. document.getElementById('ImageImageImage').width = s1
  70. }
  71. }
  72. }
  73. }
  74. }
  75. //gdy doszedl do minimalnego rozmiaru to konczy wykonywanie petli
  76. else
  77. {
  78. clearInterval(id2);
  79. zajete=false;
  80. }
  81. }
  82.  
  83. //start
  84. function changeImage(f1, f2)
  85. {
  86. if(!zajete){
  87. zajete=true;
  88. //pobiera wymiary obrazka
  89. s1 = document.getElementById('ImageImageImage').width;
  90. s2 = document.getElementById('ImageImageImage').height;
  91. //zachowuje na stele szerokosc(zmienan s1 zostanei nadpisana)
  92. s3 = s1
  93.  
  94. id = setInterval("changeSizeDown(10);", 30);
  95.  
  96. document.getElementById('ImageImageImage').height = s2;}
  97. }
[JAVASCRIPT] pobierz, plaintext
Kamil Pietrzak
Tos mnie zaskoczyl biggrin.gif
dlugoscia posta tongue.gif

sprawdzilem tak jak wkleilem na forum tongue.gif
ale na jsie jak widac za bardzo sie nie znam
ogolnie moja wiedza na temat programowania konczy sie na php, a i to przez niektorych nie jest uwazane za prawdziwe programowanie ^^

skrypt mam nadzieje wyglada juz nieco lepiej winksmiley.jpg
jesli chodzi o onclicki, przeczytalem o co chodzi, dalem do zakladek, ale tutaj nie widze za bardzo sensu robienia tego zdalnie
poza tym wszelkie logiczne przeslanki mowia o tym, ze to tylko niepotrzebnie(w tym przypadku) obciazy skrypt i narobi troche burdelu w kodzie
akurat w tym skrypcie nie widze sensu

do do disabled
z niewiadomego powodu to nie dzialalo, skrypt nie umial tez wyciagnac defaultValue

a zmienna poczatkowo tworzylem w zlym miejscu... oczywiscie
pozniej jeszcze sie zlapalem na objeciu w klamerki warunkowe nie tego co trzeba
i w miedzy czasue dowiedzialem sie, ze w js jednak istnieje ifelse tylko trza dac spacje ^^

no i dzieki ^^ ciesze sie, ze stronka sie podoba, mi w sumie tez biggrin.gif

jeszcze zostal problem roznego dzialania w roznych przegladarkach
a moze to wina mojego starego kompa...
najladniej chodzi w google chrome, szybko i plynnie
pozniej opera, jeszcze szybciej, ale strasznie skacze
na koncu firefox, zamula calkowicie, ponad 3 razy wolniej w googlu
bylbym wdzieczny za jakies testy skryptu
czasem tez sie tnie, ale...
zegarek84
co do "cięcia" skryptu (fakt - opera ma niezły silnik jeśli chodzi o animacje - zresztą nawet przy obliczeniach w js jest niezła winksmiley.jpg ) to mnie bardzo mocno zaskoczył interwał u Ciebie na 1ms ^^ ;p - nawet jeśli to oko ludzkie by tego nie zauważyło...

mała uwaga - jeśli w ciągu sekundy przesunięcia masz o mniej niż piksel (a o mniej się nie da czyli nie zawsze przesuwasz) to zmieniasz o ten piksel, jeśli o więcej to się nie zastanawiaj nad zwiększaniem interwału do płynności tylko zrób tak, żeby tych zmian maksymalnie było 25 na sekundę (25 ramek - 25fps - jak to w materiałach video) - oko ludzkie to płynnie zobaczy winksmiley.jpg - akurat pod Twój skrypt nie musisz się bawić z dodatkowymi optymalizacjami gdyż zmieniasz tylko jedną wartość DOM - więc zrób tak, żeby zmian było minimum 23 na sekunde a niewiele więcej niż 25 - więc obilicz pod 25 - interwał na 40 ;p... pozatym na słabych komputerach na setinterval to się nawarstwi jeśli nie wydoli winksmiley.jpg - lepiej by było timeout - najwyżej zwolni... a i wcześniej powinieneś ten element w skrypcie "zbuforować" a nie wyszukiwać go za każdym razem - więc zamiast buforować szerokość i wysokość leiej zbuforować uchwyt do elementu winksmiley.jpg... czyli np. el=document.getElementById('ImageImageImage');

a potem go ustawiać el.width=ilestam;

ogólnie jeśli będzie Ci się chciało czytać to możesz sobie poczytać co raz napisałem ogólnie w temacie: [js]Ruchome tło - zwłąszcza jeśli będziesz animował więcej elementów...

no i chociaż temat tyczy się czego innego to ten trick też działa w DOM więc i tu możesz po niego luknąć przy zmianie wielu atrybutów: Temat: JavaScriptSVG VML Optymalizacja skomplikowanych animacji w SVG i VML

Kamil Pietrzak
dalem na 40, w ff aby troszke zwolnilo, w pozostalych sie wyrownalo do ff winksmiley.jpg

troche jeszcze poprawilem w kodzie
i dodalem sobie efekt przezroczystosci na czas zmiany rowniez z plynna zmiana

w sumie to pasowaloby sie nauczyc jakiegos frejmlorka, a nie tak kombinowac...
ale link zobacze winksmiley.jpg

dzieki za pomoc;)
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.