Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][JavaScript]Optymalizacja JavaScript (odliczanie)
Forum PHP.pl > Forum > Przedszkole
szymek001
Witam, potrzebuję zrobić skrypt w stylu 4shared, który po skończonym odliczaniu pokaże przycisk do pobrania pliku, póki co poskładałem coś takiego, ale chyba nie jest to zbyt zoptymalizowane, bo gdy mamy otwarte więcej kart w Firefoxie, to odliczanie zamula (np. odlicza 15, 7, 0), czasem przycisk pokazuje się przed zakończaniem odliczania itp.:
  1. <body onload="time()">
  2.  
  3. <script type="text/javascript">
  4. var sec = 16;
  5. function time() {
  6. if(sec >= 1) {
  7. sec--;
  8. document.getElementById('odliczanieczasu').innerHTML=(sec);
  9. setTimeout("time();", 1000);
  10. }
  11. }
  12. </script>
  13.  
  14. <script type="text/javascript">
  15. function pokazprzycisk(){
  16. document.getElementById('przycisk').style.display='block';
  17. return false;
  18. }
  19. setTimeout("pokazprzycisk()",16*1000);
  20. <span id="odliczanieczasu">16</span><br>
  21. <input class="special" type="button" value="Pobierz" style="display: none;" id="przycisk" onclick="location.href = '<?=$file['pokaż_link']?>'; return false;">
  22.  


Co tu można zmienić, by chodziło to lepiej? może połączyć skrypt odliczania z pokazywaniem linka? Z góry dziękuję za wszelką pomoc i pozdrawiam! winksmiley.jpg
wookieb
A czytał ty kiedy do czego służy setInterval?
A potem clearInterval?
szymek001
chodzi Ci o to, by na starcie dać setInterval, a po zakończonym odliczaniu użyć clearInterval?
Cytat(wookieb @ 19.12.2010, 08:51:16 ) *
A czytał ty kiedy do czego służy setInterval?

pogooglowałem teraz trochę i znalazłem bardzo fajny i bardzie rozbudowany skrypcik odliczania: http://www.java2s.com/Code/JavaScript/Deve...ntdownTimer.htm jednak nie ma on w sobie też metod setInterval() i clearInterval().
wookieb
To, że tam tak zrobili to wcale nie znaczy, że jest dobrze.
timeout słiuży do pojedynczego odliczenia czasu a nie cyklicznego (interval).
Nie czyszczenie (clearTimeout, clearInterval) wielu "opóźnień czasowych" powoduje problemy z wydajnością przeglądarki. Wszystko zaczyna chodzić znacznie wolniej.
smietek
Najbardziej optymalny licznik w JavaScipcie korzysta z setInterval oraz różnicy obecnej daty ze znacznikiem danego wydarzenia.
Interval ma za zadanie co sekundę przeliczyć tą różnicę - dzięki temu nie ma opóźnień przy długich czasach (gdyby Interval miał np. odejmować co sekundę 1 od licznika, po kilku minutach miałbyś już opóźnienie o kilka sekund).
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.