Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: odliczanie czasu, pomocy
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
konfeusz
Witam serdecznie.
Na wstępie muszę przeprosić wszystkich, że zajmuje miejsce na tym zacnym forum, szukając gotowego rozwiązania.
Przyznam szczerze, że jestem kompletna noga z JavaScript i mimo usilnych starań zgłębienia tego języka, ni cholery mi nie wchodzi w moją mózgownicę.
Dlatego też zwracam się z ogromną prośbą do osób znający ten język o pomoc w nakierunkowaniu, bądz też (piszę to ze wstydem) w wyręczeniu mnie w tym trudnym dla mnie dziele.

Problem z jakim muszę się zmierzyć wygląda następująco:

Chodzi mi o skrytpt w JS, polegający na odliczaniu czasu (powiedzmy co 5 min) od załadowania strony. Po upływie tych, że 5 minut, wyskakuje komunikat (coś na zasadzie alertu) z pytaniem, gdzie użytkownik ma do wyboru 2 lub 3 odpowiedzi. Jeśli odpowie prawidłowo na pytanie, alert się zamyka, a czas zostaje liczony od nowa i po kolejnych 5 min, wyskakuje nowy alert z nowym pytaniem (coś na zasadzie quizu), i tak w kółko.
Powiedzmy, że pytań różnych jest 10 i generowane są losowo.
W przypadku natomiast kliknięcia w błędną odpowiedz na alercie, do głównej strony ładowana jest nowa strona (w moim przypadku strona ze skryptem wylogowującym w PHP).

Z góry dziękuję wszystkim patrzącym na moją prośbę z pobłażaniem i chęcią pomocy, a innych, krytykujących moje oczekiwania korzystania z wiedzy innych, doskonale rozumiem, jednak wyjścia nie mam jak proszenie o pomoc.

Pozdrawiam serdecznie
sylwekqaz
zakładam ze jeżeli masz już jakąś stronę która ma system logowania to trochę się znasz na programowaniu.

wiec tak
odliczanie będzie działo na zasadzie rekurencji tzn funkcja wywołuje samą siebie czyli po upływie 5 minut odlicza kolejne 5 minut

  1. function odliczanie($i) {
  2.  
  3. //jakas funkcja
  4.  
  5. if($i>0){
  6. setTimeout('odliczanie($i-1)', 800);
  7. }
  8. }


musisz oczywiście jeszcze odpalić pierwszy raz funkcje

  1. $(document).ready(function() {
  2. odliczanie(10)
  3. });


teraz pozostaje wyswietlenie okienek
oczewiscie tworzenie niestandardowych okienek może być trudne np z własnymi przyciskami (chyba ze w html'u ) wiec można by aplikacje oprzeć o okienko prompt gdzie wyświetla się komunikat i pole do wpisania jeżeli chodzi o test typu abc to porostu karz użytkownikowi wpisać w to okienko abc
tu masz poczytaj o okienku prompt LINK:http://www.doman.art.pl/kursjs/kurs/okienka_dialogowe.html
AdIoS_Neo
Witam,
przykładowe rozwiązanie poniżej, w wersji produkcyjnej pytania i odpowiedzi lepiej ładować do skryptu ajaxem by nie były widoczne dla sprytniejszych użytkowników wink.gif
[JAVASCRIPT] pobierz, plaintext
  1. <script type="text/javascript">
  2. var pytania = ["Którą literkę lubicz ?\n1) A\n2) B\n3) C", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
  3. var odpowiedzi = ["1", "1", "1", "1", "1", "1", "1", "1", "1", "1"];
  4. var ostatnie;
  5. function ankieta(){
  6. do{
  7. var ktore = Math.round(Math.random()*9);
  8. }while(ktore == ostatnie);
  9. var odpowiedz = prompt(pytania[ktore]);
  10. if(odpowiedz == odpowiedzi[ktore]){
  11. ostatnie = ktore;
  12. setTimeout('ankieta()', 2000); // wartość liczbową zmienić na 300000 (5 minut)
  13. }else{
  14. location.href = "http://google.pl";
  15. }
  16. }
  17. window.onload = function(){
  18. setTimeout('ankieta()', 2000); // wartość liczbową zmienić na 300000 (5 minut)
  19. }
  20. </script>
[JAVASCRIPT] pobierz, plaintext
konfeusz
Panowie, jesteście wielcy i wspaniali. Tak, programuję w PHP i trochę w AS, więc spokojnie sobie już poradzę, tym bardziej, że AS jest dosyć podobne do JS smile.gif potrzebowałem tylko wskazówek.
Jeszcze raz dziękuję, już poklikałem na 'POMÓGŁ'

Natomiast nie zamykam wątku. Może ktoś będzie miał jeszcze jakiś pomysł, chętnie podpatrze.
Pozdrawiam serdecznie.

-----------------> 11 czerwca 2012

no niestety, JS jest dla mnie nadal mało zrozumiały.
(chodzi mi o to, by odpowiedz podać w ciągu x sekund od wyświetlenia okna komunikatu, np po 5 sec):
Próbowałem rozwinąć skrypt jaki napisał AdIoS_Neo tak by odpowiedz również była ograniczona czasowo, stworzyłem funkcje


  1. function usun(count){
  2.  
  3. if (count > 0)
  4. setTimeout(function(){usun(count-1);}, 1000);
  5. else
  6. location.href = "http://google.pl";
  7. }


i próbowałem wywołać ją we wnątrz funkcji ankieta, nadając na samym początku skryptu zmiennej var count = 5;
Umieściłem ją wewnątrz funkcji ankieta (zaraz na końcu tej funkcji jak i w innych miejscach), ale nic nie działa.



Proszę o jakąś poradę.
kamil4u
Zrób inaczej. Wykorzystaj funkcje: https://developer.mozilla.org/pl/DOM/window.setTimeout i https://developer.mozilla.org/pl/DOM/window.clearTimeout

Tą drugą( clearTimeout ),możesz usunąć zwłokę, czyli robisz tak:
1. ustalasz, że po x sekundach przenosi Cię na Google
2. Jeżeli kliknięto jakąś odpowiedź to usuwasz zwłokę( pkt. 1 ) i wykonujesz odpowiednie akcje własne

Pozdrawiam
konfeusz
dzieki kamil4u... następna bardzo pomocna wskazówka i lektura, ale...

No namieszałem już na maxa :/

Wiem, że co nie których wprowadzę w paniczny śmiech lub zarzenowania, ale już tak mam, że wolę praktycznie próbować niż siedzieć nad toną makulatury nic z tego nie rozumiejąc.
Skleiłem 2 skrypty do kupy, tak, by mieć kontrolę nad odliczanym czasem podczas wyświetlonego komunikatu o pytanie, a wyszło mi zupełnie całkiem coś innego.
Z tego co mi wyszło, mógłbym dostosować już działanie strony tak, żeby zliczał całkowity czas faktycznego uczestnictwa w stronie, bo troszkę wcześniejsza wersja tego co przedstawiam poniżej, odlicza czas, potem pauzuje podczas wyswietlania komunikatu w alercie a po uplywie czasu przekierowyuje np, na stronę statystyk.
Ale nie zupełnie o to mi chodziło.

Z tego co mi poniżej wykiełkowało, zlicza wlasnie czas, pauzuje go podczas ALERT, natomiast po kliknieciu w prawidłowa odpowiedz, licznik sie zachowuje jak by plynely 2 czasy (stary i nowo wywolany)...

Zasadniczo wiem o co chodzi, ale moze mi ktos wskazac blad, gdzie zle i dlaczego wywołuję clearTimeOut??

  1. <script type="text/javascript">
  2. //pierwowzor skryptu by AdIoS_Neo
  3. var pytania = ["Którą literkę lubicz ?\n1) A\n2) B\n3) C", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
  4. var odpowiedzi = ["1", "1", "1", "1", "1", "1", "1", "1", "1", "1"];
  5. var ostatnie;
  6.  
  7. function ankieta(){
  8.  
  9.  
  10. do{
  11. var ktore = Math.round(Math.random()*9);
  12.  
  13. }while(ktore == ostatnie);
  14. setTimeout(function(){writeText(50);}, 3000);// liczy ale ciagle z pauza podczas questa
  15. var odpowiedz = prompt(pytania[ktore]);
  16.  
  17. if(odpowiedz == odpowiedzi[ktore]){
  18.  
  19. ostatnie = ktore;
  20. setTimeout('ankieta()', 4000); // wartość liczbową zmienić na 300000 (5 minut)
  21. clearTimeout(writeText);
  22. }
  23. else{
  24. location.href = "http://google.pl";
  25. }
  26. }
  27.  
  28. function writeText(count){
  29. document.getElementById("TEXT1").value = count;
  30. // Dzięki temu warunkowi będzie wykonywane odliczanie.
  31. // Klauzula else zapobiega wykonaniu dalszej części kodu,
  32. // do momentu zakończenia odliczania.
  33. if (count > 0)
  34. setTimeout(function(){writeText(count-1);}, 1000);
  35. else
  36. location.href = "http://google.pl";
  37. // document.getElementById("TEXT1").value = "Koniec odliczania!!!";
  38. }
  39.  
  40. //-->
  41.  
  42. window.onload = function(){
  43. setTimeout('ankieta()', 3000); // wartość liczbową zmienić na 300000 (5 minut)
  44.  
  45. }
  46. </script>
  47.  
  48. </head>
  49.  
  50. <body bgcolor="silver">
  51.  
  52. <input id="TEXT1" type="text" />
  53. <input type="button" value="Start" onclick="writeText(3);" /><br>
  54.  
  55. </body>
  56. </html>
  57.  
kamil4u
Tak to jest jak nie poświęcisz 3min, żeby przeczytać linki, które podałem. Generalnie w tym miejscu powinienem skończyć mojego posta, ale napiszę trochę dokładniej, a raczej zacytuję:
Link 1: https://developer.mozilla.org/pl/DOM/window.setTimeout
Cytat
id = window.setTimeout(funkcja, opóźnienie[, param1, param2, ...]);


Link 2: https://developer.mozilla.org/pl/DOM/window.clearTimeout
Cytat
window.clearTimeout(id)




Zamiast konstrukcji: setTimeout('ankieta()', 4000);, używaj setTimeout(ankieta, 4000); . Działają tak samo, ale druga opcja jest lepsza( nie uruchamia niepotrzebnie interpretera JS drugi raz ) smile.gif

I zamiast: setTimeout(function(){writeText(50);}, 3000); wykorzystaj 3 argument funkcji setTimeout - znów wychodzi na to, że nawet nie zajrzałeś do linków
konfeusz
z ręką na sercu, przyznam się, że masz rację :/ ale to wrodzone anty nastawienie do JS.
Jakoś nigdy mi ten język nie podchodził, nie wiem dla czego, ale po prostu nie potrafię się w nim poruszać.
Na php'a spojżę i widzę co się dzieje, w JS jakoś nie zawsze szybko zrozumiem działania kodu.

Zmyliła mnie składnia window.setTimeout, ale dlatego, że kojarzy mi się z wywołaniem okna w AS, teraz dopiero do mnie dociera, że pewnie chodzi właśnie o okno komunikatu wink.gif.
Idę odrabiać pracę domową i dokładnie zapoznać się z podanym przez Ciebie Kamilu materiałem.
Jeszcze raz dziękuję i 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.