Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Odliczanie i zapamiętywanie.
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
deluks1980
Witam.

Mam pewien problem z 'countdownem' w jQuery. Biję się z tym już 2 dni, nie mogę wspaść na żaden dobry pomysł.

Dlatego piszę ten post - proszę Was, o pomoc:

Chodzi o to, że mam skrypt, który odlicza 60 sekund i wywołuje akcję. Problem w tym, iż muszę zapamiętać wartość sekundy przy jakiej użytkownik odświeżył stronę - czyli, jeśli pozostało 50 sekund, a użytkownik odświeżył stronę, to liczenie ma się odbywać tak jakby w 'tle' aby po ponownym załadowaniu strony (które trwało np. 3 sekundy) odliczanie zaczęło się od 47 sekund a nie od początku.

Mam nadzieję, że zrozumieliście. Liczę na Waszą pomoc. party.gif

Pozdrawiam Serdecznie,
Jerzy z Kołobrzegu.
flashdev
Zapamiętaj w cookies datę rozpoczęcia odliczania w formacie timestamp.
deluks1980
Cytat(flashdev @ 7.12.2010, 02:00:52 ) *
Zapamiętaj w cookies datę rozpoczęcia odliczania w formacie timestamp.


W cookies chyba będzie trochę nie bezpiecznie, bo tu chodzi o dodawanie "życia" w grze co 2 minuty.

Doszedłem do takiego efektu końcowego:

  1. function startBarTimer() {
  2. $('#BarTimer').each(function(){
  3. $(this).countdown('destroy');
  4. var self = this;
  5. var id = $(this).attr('id');
  6. var interval = $(this).attr('interval');
  7. var total = parseInt( $(this).attr('total') );
  8. var current = parseInt( $(this).attr('current') );
  9. var statName = $(this).attr('statName');
  10. var offset = parseInt( $(this).attr('offset') );
  11. var inc = parseInt( $(this).attr('inc') );
  12.  
  13. $("#"+statName+"MaxValue").text(total);
  14. if( current < total ) {
  15. var options = {
  16. until: '+'+(interval - offset),
  17. format: 'MS',
  18. compact: true,
  19. onExpiry: function(){
  20. var current = parseInt( $('#BarTimer').attr('current') );
  21. current = current + inc;
  22. if (current > total) {
  23. current = total;
  24. }
  25. $('#BarTimer').attr('current', current);
  26. $("#"+statName+"CurrentValue").text(current);
  27. $("#"+statName+"MaxValue").text(total);
  28. if( current < total ){
  29. $(self).countdown('change' ,{until: "+"+interval}).css("color", "pink");
  30. $("#"+statName+"CurrentValue2").text("Refill?");
  31. }
  32. else
  33. {
  34. $("#"+statName+"CurrentValue2").text("");
  35. $(self).html( "" );
  36. }
  37. }
  38. };
  39. $(this).countdown( options ).css("color", "pink");
  40. }
  41. else
  42. {
  43. $("#"+statName+"CurrentValue2").text("");
  44. }
  45. });
  46. };


Jak widać, teraz jedynie pozostało by "jakims cudem" zmieniać zmienną offset (w sekundach). Zdaję się tutaj na Wasze umiejętności.

Pozdrawiam.

Pomoże ktos?...
aart3k
Ja to rozwiązałem za pomocą PHP; W PHP w sesji ustaw sobie czas załadowania strony, i generując javascript przypisz sobie ten czas do jakiejś zmiennej w javascripcie. Dodatkowo użytkownik u mnie musi być zalogowany aby dostać javascript.
deluks1980
No u mnie też musi być zalogowany.

Popróbuję jeszcze, dam znać jak mi poszło wstydnis.gif .

Pozdrawiam.

Niestety nic z tego.

Jak widzisz, u mnie trzeba zmieniać offset (w sekundach), nie opiera się to na time(). worriedsmiley.gif

Mało coś tu ludzi dry.gif
erix
Cytat
Chodzi o to, że mam skrypt, który odlicza 60 sekund i wywołuje akcję. Problem w tym, iż muszę zapamiętać wartość sekundy przy jakiej użytkownik odświeżył stronę - czyli, jeśli pozostało 50 sekund, a użytkownik odświeżył stronę, to liczenie ma się odbywać tak jakby w 'tle' aby po ponownym załadowaniu strony (które trwało np. 3 sekundy) odliczanie zaczęło się od 47 sekund a nie od początku.

Daj znać serwerowi przez AJAX, że zaczynasz odliczanie, potem - przy odświeżeniu - możesz wczytać wartość startową z serwera.
deluks1980
Cytat(erix @ 9.12.2010, 11:56:30 ) *
Daj znać serwerowi przez AJAX, że zaczynasz odliczanie, potem - przy odświeżeniu - możesz wczytać wartość startową z serwera.


Mówisz o sesjach? W AJAX dodawać w sesji date rozpoczęcia odliczania, a przy odświeżaniu czytanie tego z sesji?
I co mi z tego?smile.gif Jeśli ja potrzebuję zmieniać offset.

Może jeszcze raz wyjaśnię:

W funkcji, którą podałem wczesniej (jQuery) kluczowe są te zmienne:

var interval = $(this).attr('interval');
var offset = parseInt( $(this).attr('offset') );

Interval, odpowiada za to, ile sekund ma odliczać,
offset, za to, ILE JUŻ ODLICZYŁO (interval), a jeśli odliczyło całość (60 sekund) to zaczyna od nowa. I tu własnie leży mój problem.

Generalnie chodzi o to, aby dodawać komuś HP (punkt życia) co 1 minute, a jeśli nie loguje się przez czas, który zajęło by całe odnawianie HP do pełna, to dostaje automatycznie całość HP.
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.