Gdy to zrobisz w jQuery:
$(function() {
alert("DOM is loaded, but images not necessarily all loaded");
});
Oczekuje na załadowanie DOM i wykonuje kod. Jeśli wszystkie obrazy nie zostaną załadowane, nadal wykonuje kod. To jest oczywiście to, czego chcemy, jeśli inicjujemy jakieś elementy DOM, takie jak pokazywanie lub ukrywanie elementów lub dołączanie zdarzeń.
Powiedzmy jednak, że chcę animacji i nie chcę, aby działała, dopóki wszystkie obrazy nie zostaną załadowane. Czy istnieje jQuery w oficjalny sposób?
Najlepszym sposobem jest użycie <body onload="finished()">
, ale tak naprawdę nie chcę tego robić, chyba że muszę.
Uwaga: w jQuery 1.3.1 w Internet Explorerze występuje błąd, który faktycznie czeka na załadowanie wszystkich obrazów przed wykonaniem kodu w środku $function() { }
. Więc jeśli używasz tej platformy, uzyskasz zachowanie, którego szukam, zamiast poprawnego zachowania opisanego powyżej.
$("img").load()
działa?Odpowiedzi:
Za pomocą jQuery można
$(document).ready()
wykonać coś, gdy DOM jest załadowany, i$(window).on("load", handler)
wykonać coś, gdy załadowane są również wszystkie inne rzeczy, takie jak obrazy.Różnicę można zobaczyć w następującym pełnym pliku HTML, pod warunkiem, że masz
jollyroger
pliki JPEG (lub inne odpowiednie):Dzięki temu okno alertu pojawia się przed załadowaniem obrazów, ponieważ DOM jest w tym momencie gotowy. Jeśli następnie zmienisz:
w:
wtedy okno ostrzeżenia pojawi się dopiero po załadowaniu zdjęć.
Dlatego, aby poczekać, aż cała strona będzie gotowa, możesz użyć czegoś takiego:
źródło
Napisałem wtyczkę, która może uruchamiać wywołania zwrotne, gdy obrazy są ładowane w elementach, lub uruchamiane raz na załadowany obraz.
Jest podobny do
$(window).load(function() { .. })
, z tym wyjątkiem, że pozwala zdefiniować dowolny selektor do sprawdzenia. Jeśli chcesz tylko wiedzieć, kiedy#content
załadowano wszystkie obrazy (na przykład), jest to wtyczka dla Ciebie.Wspiera również ładowanie obrazów przywoływanych w CSS, takich jak
background-image
,list-style-image
itpwaitForImages wtyczka jQuery
Przykładowe użycie
Przykład na jsFiddle .
Więcej dokumentacji jest dostępnych na stronie GitHub.
źródło
('img selector').each(function(index) { var offset = $(this).offset(); ...});
jednak offset.top wciąż wynosi zero. Dlaczego?$(window).load()
będzie działać tylko przy pierwszym załadowaniu strony. Jeśli wykonujesz dynamiczne czynności (na przykład: kliknij przycisk, poczekaj na załadowanie nowych obrazów), to nie zadziała. Aby to osiągnąć, możesz użyć mojej wtyczki:Próbny
Pobieranie
źródło
Yevgeniy Afanasyev
odpowiedzi , imagesLoaded wykonuje znacznie lepszą robotę i obejmuje opisany powyżej przypadek użycia wraz z wieloma innymi przypadkami narożnymi (zobacz rozwiązane problemy z github) .Dla tych, którzy chcą otrzymywać powiadomienia o zakończeniu pobierania pojedynczego obrazu, który zostanie zgłoszony po
$(window).load
pożarach, możesz użyćload
zdarzenia elementu obrazu .na przykład:
źródło
Żadna z dotychczasowych odpowiedzi nie dała tego, co wydaje się najprostszym rozwiązaniem.
źródło
Polecam korzystanie z
imagesLoaded.js
biblioteki javascript.Dlaczego nie skorzystać z jQuery
$(window).load()
?Zgodnie z /programming/26927575/why-use-imagesloaded-javascript-library-versus-jquerys-window-load/26929951
Inne dobre powody, aby używać obrazów załadowanych
Zasoby
źródło
Z jQuery przychodzę z tym ...
Demo: http://jsfiddle.net/molokoloco/NWjDb/
źródło
Użyj imagesLoaded PACKAGED v3.1.8 (6,8 Kb po zminimalizowaniu). Jest to stosunkowo stary (od 2010 r.), Ale wciąż aktywny projekt.
Możesz go znaleźć na github: https://github.com/desandro/imagesloaded
Ich oficjalna strona: http://imagesloaded.desandro.com/
Dlaczego jest lepszy niż używanie:
Ponieważ możesz chcieć ładować obrazy dynamicznie, w ten sposób: jsfiddle
źródło
W ten sposób możesz wykonać akcję, gdy wszystkie obrazy w ciele lub innym pojemniku (zależnym od twojego wyboru) zostaną załadowane. PURE JQUERY, nie są potrzebne wtyczki.
źródło
Moje rozwiązanie jest podobne do molokoloco . Zapisane jako funkcja jQuery:
przykład:
źródło