Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> odliczanie czasu, pomocy, odliczanie czasu w javascript
konfeusz
post 5.06.2012, 16:05:30
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
sylwekqaz
post 5.06.2012, 20:58:13
Post #2





Grupa: Zarejestrowani
Postów: 40
Pomógł: 6
Dołączył: 5.03.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
AdIoS_Neo
post 6.06.2012, 11:15:52
Post #3





Grupa: Zarejestrowani
Postów: 159
Pomógł: 43
Dołączył: 8.03.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
konfeusz
post 11.06.2012, 10:15:45
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


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ę.

Ten post edytował konfeusz 11.06.2012, 12:44:47
Go to the top of the page
+Quote Post
kamil4u
post 11.06.2012, 14:22:38
Post #5





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
konfeusz
post 11.06.2012, 15:19:26
Post #6





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


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.  


Ten post edytował konfeusz 11.06.2012, 15:26:55
Go to the top of the page
+Quote Post
kamil4u
post 11.06.2012, 15:29:50
Post #7





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


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

Ten post edytował kamil4u 11.06.2012, 15:31:26


--------------------
Go to the top of the page
+Quote Post
konfeusz
post 12.06.2012, 08:39:59
Post #8





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 21:20