Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z ładowaniem obrazków (odczyt szerokości kontenera)
Forum PHP.pl > Forum > Po stronie przeglądarki
m72
Witam, problem jest dość szeroko poruszany w internecie ale ciężko znaleźć prostą odpowiedź.
W sktócie, chce zrobić sktypt który:
1. Załaduje na stronę obrazki poprzez jquery append
2. Poczeka aż one się załadują
3. Odczyta szekokość całego kontenera do którego się załadowały.

Obrazki ładuję do tabeli bo tego wymaga dalsza (tu nie zamieszczona) część skryptu, ale to nieistotne.
Wiem, że jest wiele pluginów do ładowania obrazków.
Czy ktoś mógłby powiedzieć jak zmodyfikować ten skrypt tak żeby działał jak w założeniach ?

Teraz problem polega na tym że skryp przelatuje szybciej niż obrazki (specjalnie duże) się załadują i odczytana w konsoli szerokość jest zero.
po odświeżeniu strony jest już wszystko ok. Żeby sprawdzić błąd ponownie trzeba wyczyścić pamięć podręczną przegądarki i ją zresetować.

Oto kod:

  1. <!DOCTYPE html>
  2. <meta charset="UTF-8">
  3. <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  4. </head>
  5. <div style="height:500px; background-color:#eee; overflow:auto;">
  6. <table id="fotokontener"><tr></tr></table>
  7. </div>
  8.  
  9. $("#fotokontener tr").append('<td><img src="http://www.hdwallpapersfullhd.net/wp-content/uploads/2014/05/Golden-Gate-Bridge-HD-Wallpapers-Golden-Gate-Bridge-Wallpaper.jpg"/></a></td>');
  10. $("#fotokontener tr").append('<td><img src="http://cdn.wonderfulengineering.com/wp-content/uploads/2014/01/digital-wallpaper-3.jpg"/></a></td>');
  11. console.log( $("#fotokontener").width() );
  12.  
  13.  
  14.  
  15.  
  16. </body>
  17. </html>
trueblue
Czekasz aż obrazki się załadują, po skończeniu ładowania mierzysz szerokość kontenera.
Temat: AJAXPHPpreloader dobrze
m72
Jak powyższe by się miało do mojego kodu bo po prostu nie kumam tamtego tematu.
Próbowałem z funkcją .load() z jquery ale ona poprostu nie działa dla obrazków.
trueblue
Tak:
var images=$('#fotokontener td img');
reszta bez zmian.
Mierzenie kontenera w linii 8.
Proponuję Ci wywoływanie kodu JS wewnątrz funkcji ready().
m72
Nie bardzo kumam jak to działa ale DZIAŁA ! smile.gif dzięki.
Zamieszczam cały działający kod gdzi w 2 miejscach jest odczytywanie szerokości kontenera i widać ze dopiero po załadowaniu zdjęć jest ok.
Kod się pewnie komuś przyda bo to bardzo często poruszany temat na forach ale nigdzie nie ma tak prostego rozwiązania smile.gif

  1. <!DOCTYPE html>
  2. <meta charset="UTF-8">
  3. <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  4. </head>
  5. <div style="height:500px; background-color:#eee; overflow:auto;">
  6. <table id="fotokontener"><tr></tr></table>
  7. </div>
  8.  
  9.  
  10.  
  11. $("#fotokontener tr").append('<td><img src="http://www.hdwallpapersfullhd.net/wp-content/uploads/2014/05/Golden-Gate-Bridge-HD-Wallpapers-Golden-Gate-Bridge-Wallpaper.jpg"/></a></td>');
  12. $("#fotokontener tr").append('<td><img src="http://cdn.wonderfulengineering.com/wp-content/uploads/2014/01/digital-wallpaper-3.jpg"/></a></td>');
  13. console.log( $("#fotokontener").width() );
  14.  
  15. var images=$('#fotokontener td img');
  16. var count=0;
  17. for(var i=0;i<images.length;i++){
  18. var img=document.createElement('img');
  19. img.onload=function(){
  20. count++;
  21. if(count==images.length){
  22. console.log( $("#fotokontener").width() );
  23. }
  24. }
  25. img.src=$(images[i]).attr('src');
  26. }
  27.  
  28. </body>
  29. </html>
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.