Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dodawanie energii co 5 minut
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Maciek316
Witam, mam takie pytanie bardziej teoretyczne.
Próbuje stworzyć skrypt który najpierw sprawdza czy energii jest mniej niż maksimum i potem dodaje co 5 minut aż do osiągnięcia maksimum.
Chcę zrobić to tak żeby działało zarówno gdy użytkownik jest zalogowany(odlicza czas w js) oraz gdy jest wylogowany.
Jak mogę takie coś osiągnąć?

Zrobiłem wersje js:
  1. function energia(teraz, max,i,user) // (aktualna energia, maksymalna energia, czas odnowienia)
  2. {
  3. if(teraz < max)
  4. {
  5. var minut = Math.floor(i/60); //ilosc minut
  6. var sekund = Math.floor(i - minut * 60); // ilosc sekund
  7.  
  8. if(i > 0)
  9. {
  10. $("#energy_timer").text("+1 za "+dodajzera(minut)+":"+dodajzera(sekund)); // do danego diva wjebuje czas - dodajzero jest w licznik.js
  11. i--;
  12. setTimeout("energia("+teraz+","+max+","+i+","+user+")",1000);
  13. console.log(i);
  14. }
  15. else
  16. {
  17. $("#energy_timer").text(""); // jak sie odliczanie skonczylo to zeruje diva
  18. teraz++;
  19.  
  20. var request = $.ajax({ //wysyla energie do danego uzytkownika
  21. type: 'POST',
  22. url: 'polub.php',
  23. data: { energy: teraz, user_sql: user } })
  24. .done(function(data) {
  25. $("#energia").text(teraz+"/"+max); // wypisze nowe wartosci
  26. $("#energia_progress").animate({width: teraz/max*109,},500); // zanimuje progress bar zebys ie ladnie przesunal
  27. energia(teraz,max,20,user); // sprawdzi czy sa jeszcze jakies punkty do dodania
  28. })
  29. .fail(function() { alert("error"); }) // jesli sie przeslanie danych nie uda zwraca blad
  30.  
  31. }
  32. }
  33. }

Ale działa jedynie gdy użytkownik jest zalogowany.
ohm
Zapisujesz stan kiedy ostatnio dodawałeś energię, np cykl o 13:30, użytkownik ostatnio aktywny był o 13.31 po loguje się chwilę po 14:00, po zalogowaniu/odświeżeniu strony obliczasz różnicę, która wynosi w tym przypadku 29 minut, dzielisz to na 5 (jako że co 5 minut) i masz 5 cykli pominiętych. Zapisujesz że stan został zaktualizowany w tym cyklu (cykl na godz. 14).

Taki zarys, ogólnie do dopracowania, ale mam nadzieję że naprowadziłem na koncepcję.
Maciek316
A jak to polaczyc z js'em odliczajacym w czasie rzeczywistym?
Bo jesli uzytkownik zostawi strone w tle, to js bedzie odliczal i sam dodawal, a nie odswiezajac ne dostaniemy nowego "ostatniego zalogowania" i po odswiezeniu dostaniemy energie zarówno ze skryptu js jak i z php.
Pyton_000
w JS wyświetlasz tylko licznik wirtualny. To po stronie serwera musisz wyliczać aktualną wartość.
Do JS przekazujesz aktualną wartość i rozpoczynasz liczenie i zmieniasz tylko html, przy każdej akcji wykonanej po stronie frontu i tak musisz przeliczać to po stronie PHP.

Jeśli będziesz wysyłał Ajaxem to można sobie dowolnie zwiększać licznik i dowolnej osobie...
Maciek316
Jak obliczyć różnicę pomiędzy czasem ostatniego logowania a aktualnym, jeśli czas ostatniego logowania aktualizuje przy odswiezeniu strony?
nospor
roznica = czas_aktualny - czas_ostatniego_logowania
Maciek316
no tak, tylko ten czas_ostatniego_logowania aktualizje sie przy każdym odświezeniu strony, stąd czas_aktualny=czas_ostatniego_logowania
nospor
Masz liczyc roznice miedzy czasem aktualnym a ostatnim zapisem do bazy
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.