Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][PHP]preloader - dobrze?
Forum PHP.pl > Forum > Przedszkole
kamilo818
Zerknijcie:

  1. <!DOCTYPE html>
  2. <html lang="pl">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5.  
  6. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
  7. <script type="text/javascript" src="http:///js/jquery.cycle.all.js"></script>
  8. <script src="http://code.jquery.com/ui/1.11.0/jquery-ui.js"></script>
  9. <meta charset="" />
  10. <meta name="author" content="" />
  11. <title>Preloader</title>
  12. <script type="text/javascript">
  13. $(document).ready(function() {
  14. $.ajax({
  15.  
  16. url : ('index.php'),
  17. beforeSend : function() {
  18. $('.loader').show();
  19. },
  20. success : function(obj) {
  21. window.setTimeout(function () {
  22. $('.loader').fadeOut();
  23. window.setTimeout(function () {
  24. $('body').html(obj);}, 500);
  25. }, 2000);
  26. },
  27. });
  28. });
  29. </script>
  30. </head>
  31. <body>
  32. <div class="loader" style="display: none; margin-top:150px;"><img src="490.GIF"/><br><img src="289.GIF"/></div>
  33. </body>
  34. </html>


Zadziała to jak preloader? Czyli bedzie sie pokazywał obrazek zanim sie wczyta cała strona?
trueblue
Niekoniecznie, najpierw powinieneś preloadować obrazek do preloadera, potem wywołać ajaxa.
Natomiast nie wiem dlaczego podchodzisz do całości tego zagadnienia od...tyłu.
kamilo818
Jeszcze raz tylko wolniej proszę. Sorry ale nie załamałem
trueblue
Najpierw ładujesz obrazek i czekasz na załadowanie: http://stackoverflow.com/a/3537471
Potem wywołujesz ajaxa.

Natomiast, nie powinieneś ładować treści całej strony w ajaxie tylko umieścić ją od razu bezpośrednio w kodzie, bo:
1. Będzie słaba albo wręcz nie będzie indeksacji przez roboty
2. [u]Nie masz zapewnionej w 100% sytuacji[/u], że metoda success ajaxa wywoła się po załadowaniu obrazków zawartych w index.php (a być może tego oczekujesz po ajaxie).

Jeśli chcesz zrobić preloader dla obrazków, powinieneś ustawić warstwę nad całością strony (div fixed background-image lub <img>), sparsować całą stronę pod kątem atrybutu src dla <img> i/lub sparsować css pod względem background-image, oprogramować ich ładowanie, po załadowaniu wszystkich, zniszczyć/schować warstwę z preloaderem.
kamilo818
Coś takiego?
  1. $("img").load(function() {
  2.  
  3. window.setTimeout(function () {
  4. $('.loader').slideUp();}, 3000);
  5. }).each(function() {
  6. if(this.complete) $(this).load();
  7. });

  1. <div class="loader" style="position:fixed;top:0;left:0;width:100%;height:100%;background:white;z-index:999999999; padding-top:150px;"><img src="490.GIF"/><br><img src="289.GIF"/></div>
trueblue
  1. var images=$('img');
  2. var count=0;
  3. for(var i=0;i<images.length;i++){
  4. var img=document.createElement('img');
  5. img.onload=function(){
  6. count++;
  7. if(count==images.length){
  8. //tu ajax na success $('.loader').remove();
  9. }
  10. }
  11. img.src=$(images[i]).attr('src');
  12. }
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.