Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Wyświetlanie div w trybie ciągłym. Odporne na odświeżanie
Forum PHP.pl > Forum > Po stronie przeglądarki
ksiezulekwwo
Witam wszystkich
Od paru dni piszę stronę inetrnetową i potrzebuję skryptu który będzie na samym początku chował a potem po kolei wyświetlał divy.
Zastosowałem jquery no i wyszło:

  1. $(document).ready(function() {
  2. $("div.a1").slideUp(0).delay(100000).fadeIn(400);
  3. $("div.a2").slideUp(0).delay(90000).fadeIn(400);
  4. $("div.a3").slideUp(0).delay(80000).fadeIn(400);
  5. $("div.a4").slideUp(0).delay(70000).fadeIn(400);
  6. $("div.a5").slideUp(0).delay(60000).fadeIn(400);
  7. $("div.a6").slideUp(0).delay(50000).fadeIn(400);
  8. $("div.a7").slideUp(0).delay(40000).fadeIn(400);
  9. $("div.a8").slideUp(0).delay(30000).fadeIn(400);
  10. $("div.a9").slideUp(0).delay(20000).fadeIn(400);
  11. $("div.a10").slideUp(0).delay(10000).fadeIn(400);
  12. });

Jak widzimy skrypt wyświetla kolejne divy po określonym czasie, jednak ja chciałbym aby te divy były wyświetlane w sposób ciągły tj. nawet po odświeżeniu lub opuszczeniu chwilowo strony, a mój skrypt rzecz jasna zaczyna pracę od nowa po każdym ponownym załadowaniu. No i tutaj bardzo prosiłbym o jakąś pomoc, myślałem że może można coś z cookies porobić jednak nic mi nie wychodzi a nie chciałbym podpinać pod to żadnego php. Będę wdzięczny chociaż za jakieś sugestie jak to można zrobić, gdyż w jquery pracuję dopiero 1 dzień sad.gif
tolomei
Czyli za pierwszym razem, gdy użytkownik odwiedza stronę to ma mu zadziałać skrypt, a później już ma być cały czas widoczne normalnie tak?
Najbardziej pasowałoby tu utworzyć zmienną sesyjną.

  1. <?php
  2. ?>
  3. <html>
  4. <head>
  5. <script type="text/javascript" src="jquery.js"></script>
  6. <script type="text/javascript">
  7. $(function(){
  8. <?php
  9. if(isset($_SESSION['skrypt'])) {
  10. echo 'var skrypt_start = 1;';
  11. } else {
  12. $_SESSION['skrypt'] = 1;
  13. echo 'var skrypt_start = 0;';
  14. }
  15. ?>
  16. if(skrypt_start == 1) {
  17. $("div.a1").slideUp(0).delay(100000).fadeIn(400);
  18. $("div.a2").slideUp(0).delay(90000).fadeIn(400);
  19. $("div.a3").slideUp(0).delay(80000).fadeIn(400);
  20. $("div.a4").slideUp(0).delay(70000).fadeIn(400);
  21. $("div.a5").slideUp(0).delay(60000).fadeIn(400);
  22. $("div.a6").slideUp(0).delay(50000).fadeIn(400);
  23. $("div.a7").slideUp(0).delay(40000).fadeIn(400);
  24. $("div.a8").slideUp(0).delay(30000).fadeIn(400);
  25. $("div.a9").slideUp(0).delay(20000).fadeIn(400);
  26. $("div.a10").slideUp(0).delay(10000).fadeIn(400);
  27. }
  28. });
  29. </script>
  30. ...


To jedna z możliwości.

Pozdrawiam.
ksiezulekwwo
Sorry, nie chce być upierdoliwy ale nie działa i nie mogę sobie poradzić z tym. Działa tylko sam skrypt ale bez "odporności na odświeżanie". To ma działać tak, użytkownik wchodzi uruchamia sie skrypt i działa przez określony czas ( ustawiony przeze mnie oczywiście), nawet jeżeli użytkownik odświeży stronę lub na chwilę ją opuści, ale wróci zanim skrypt nie skończy pracy.
Poniżej wklejam kod jaki dałem w pliku index.php, nie wywala błędów ale nie działa, może coś nie tak zrobiłem?

  1. <?php
  2. session_start();
  3. ?>
  4. <link type="text/css" rel="stylesheet" media="all" href="style.css">
  5. <script src="http://code.jquery.com/jquery-latest.js"></script>
  6. </head>
  7. <script type="text/javascript">
  8. $(function(){
  9. <?php
  10. if(isset($_SESSION['skrypt'])) {
  11. echo 'var skrypt_start = 1;';
  12. } else {
  13. $_SESSION['skrypt'] = 1;
  14. echo 'var skrypt_start = 0;';
  15. }
  16. ?>
  17. if(skrypt_start == 1) {
  18. $("div.a1").slideUp(0).delay(25000).fadeIn(400);
  19. $("div.a2").slideUp(0).delay(20000).fadeIn(400);
  20. $("div.a3").slideUp(0).delay(15000).fadeIn(400);
  21. $("div.a4").slideUp(0).delay(10000).fadeIn(400);
  22. $("div.a5").slideUp(0).delay(6000).fadeIn(400);
  23.  
  24. }
  25. });
  26. </script>
  27. <div class="a1">tekst1</div><br />
  28. <div class="a2">tekst1</div><br />
  29. <div class="a3">tekst1</div><br />
  30. <div class="a4">tekst1</div><br />
  31. <div class="a5">tekst1</div><br />
  32. </body>
  33. </html>


I wogóle teraz sie skapłem że chyba źle mnie zrozumiałeś biggrin.gif bo twój kod kompletnie nie ma prawa działać tak jak chcę sad.gif
Może ktoś podsunie jakiś pomysł jak to można najprościej rozwiązać?
tolomei
Już rozumiem o co Ci chodzi.
Czyli jak odświeżę stronę dokładnie w połowie wykonywania się skryptu - to po przeładowaniu on dokończy swoje działanie dokładnie od miejsca w którym przerwał.

Tak ?
ksiezulekwwo
Dokładnie tak. smile.gif
tolomei
Trochę szalony pomysł, ale wykonalny.
Musiałbyś przynajmniej ze 2 razy na sekundę przesyłać ajaxem dane na temat czasu jaki pozostał kolejnym zdarzeniom do końca ich animacji.
Serwer automatycznie zapisywałby to w sesji tak, aby po przeładowaniu strony mógł ustawić konkretne czasy każdemu z elementów.

Może ktoś ma inny pomysł?
#luq
Cytat(tolomei @ 15.04.2012, 00:40:30 ) *
Może ktoś ma inny pomysł?

localStorage lub ciastka
tolomei
Możesz użyć zdarzenia onBeforeUnload w JavaScripcie. Zdarzenie potrafi wykryć, że okno dostało polecenie przeładowania/zamknięcia i na krótko przed tym potrafi wykonać jakąś funkcję jeszcze. W tej funkcji możesz wrzucić np. JSON-a do web storage i później to odczytać - dokładnie tak jak zaproponował #luq.
ksiezulekwwo
Cytat(tolomei @ 15.04.2012, 09:50:53 ) *
Możesz użyć zdarzenia onBeforeUnload w JavaScripcie. Zdarzenie potrafi wykryć, że okno dostało polecenie przeładowania/zamknięcia i na krótko przed tym potrafi wykonać jakąś funkcję jeszcze. W tej funkcji możesz wrzucić np. JSON-a do web storage i później to odczytać - dokładnie tak jak zaproponował #luq.


Dzięki za sugestie, spróbuje twoją metodą ale szczerze mówiąc dla mnie to trudne, narazie spróbuje na samych cookies to zrobić bez ajaxa, mam jeden pomysł i oby wyszło. A jeśli to to istnieje możliwość jakiejś pomocy z twojej strony? Jeżeli to nie skomplikowane to możemy sie umówić na jakąś zapłatę.
tolomei
Ja za pomoc na forum opłat nie pobieram smile.gif
Mogę Cię naprowadzić, ale będziesz musiał zrobić to sam.
ksiezulekwwo
Cytat(tolomei @ 15.04.2012, 11:19:45 ) *
Ja za pomoc na forum opłat nie pobieram smile.gif
Mogę Cię naprowadzić, ale będziesz musiał zrobić to sam.


No ok:D próbuje sam na cookies samych i javascript, mam tylko pytanie, czy jest możliwość zatrzymania wykonywania danego skryptu a konkretniej pętli w javascript? To znaczy bez spełnienia żadnych warunków nagle się ma zatrzymać. Napisałem kod który wysyła co pewien czas inne ciasteczko do użytkownika w trakcie jego pobytu na stronie i chciałbym aby po wysłaniu każdego nowego ciasteczka skrypt się zatrzymał i uruchomił dopiero po ponownym zaladowaniu strony.
tolomei
Zawsze możesz wstawić break; wewnątrz pętli. Po jego wystąpieniu następuje wyskok z pętli(działanie skryptu za pętlą jest kontynuowane).
O to pytałeś ?

Jak chcesz przerwać cały skrypt to najlepiej wsadzić ten skrypt w funkcję i wtedy dać odpowiednie polecenie return i funkcja zostanie zakończona.
ksiezulekwwo
Cytat(tolomei @ 15.04.2012, 11:41:20 ) *
Zawsze możesz wstawić break; wewnątrz pętli. Po jego wystąpieniu następuje wyskok z pętli(działanie skryptu za pętlą jest kontynuowane).
O to pytałeś ?

Jak chcesz przerwać cały skrypt to najlepiej wsadzić ten skrypt w funkcję i wtedy dać odpowiednie polecenie return i funkcja zostanie zakończona.


Tak o break mi chodziło właśnie dzięki smile.gif No nic idę kodzić i popróbuję, może coś wyjdzie, onBeforeUnload wolałbym nie używać, natomiast interesująca jest metoda z ajaxem, a jak wysyłać co 2 sekundy dane ? Można zastosować settimeout w javascript? I czy można to zapisać jakoś w cookies zamiast w sesji ? Ten ajax to bedzie alternatywa jakby nie wyszlo z samym cookies.
tolomei
Możesz użyć setTimeout() zarówno do żądań ajaxowych jak i do aktualizacji ciasteczek. Przy ciasteczkach miałbyś mniejsze straty czasu na pewno.
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.