Czy można wykryć, kiedy wszystkie obrazy są ładowane za pośrednictwem zdarzenia jQuery?
W idealnym przypadku powinien istnieć plik
$(document).idle(function()
{
}
lub
$(document).contentLoaded(function()
{
}
Ale nie mogę znaleźć czegoś takiego.
Pomyślałem o dołączeniu takiego wydarzenia:
$(document).ready(function()
{
var imageTotal = $('img').length;
var imageCount = 0;
$('img').load(function(){if(++imageCount == imageTotal) doStuff();});
}
Ale czy to się zepsuje, jeśli obraz się nie załaduje? Bardzo ważne jest, aby wywołać metodę we właściwym czasie.
Odpowiedzi:
Zgodnie z dokumentacją jQuery istnieje szereg zastrzeżeń dotyczących używania zdarzenia load z obrazami. Jak zauważono w innej odpowiedzi, wtyczka ahpi.imgload.js jest zepsuta, ale powiązany z nią sens Paula Irisha nie jest już utrzymywany.
Według Paula Irisha, wtyczka kanoniczna do wykrywania zdarzeń zakończenia ładowania obrazu jest teraz dostępna pod adresem:
https://github.com/desandro/imagesloaded
źródło
Jeśli chcesz sprawdzić nie wszystkie obrazy, ale konkretny (np. Obraz, który zastąpiłeś dynamicznie po ukończeniu DOM), możesz użyć tego:
źródło
load()
nie zostanie wywołany, gdy obraz jest już załadowany. Może się to łatwo zdarzyć, gdy obraz znajduje się w pamięci podręcznej przeglądarki użytkownika. Możesz sprawdzić, czy obraz jest już załadowany za pomocą$('#myImage').prop('complete')
, co zwraca wartość true po załadowaniu obrazu.Możesz użyć mojej wtyczki waitForImages do obsługi tego ...
Zaletą tego jest to, że możesz zlokalizować go na jednym elemencie nadrzędnym i opcjonalnie może wykrywać obrazy, do których odwołuje się CSS.
To jednak tylko wierzchołek góry lodowej, sprawdź dokumentację, aby uzyskać więcej funkcji.
źródło
Użycie jQuery $ (). Load () jako modułu obsługi zdarzeń IMG nie jest gwarantowane. Jeśli obraz zostanie załadowany z pamięci podręcznej, niektóre przeglądarki mogą nie uruchomić zdarzenia. W przypadku (starszych?) Wersji przeglądarki Safari, jeśli zmienisz właściwość SRC elementu IMG na tę samą wartość , zdarzenie onload NIE zostanie uruchomione.
Wygląda na to, że jest to rozpoznane w najnowszym jQuery (1.4.x) - http://api.jquery.com/load-event - cytując:
Dostępna jest teraz wtyczka rozpoznająca ten przypadek, a właściwość „complete” przeglądarki IE dla elementów IMG jest ładowana: http://github.com/peol/jquery.imgloaded/raw/master/ahpi.imgload.js
źródło
Zgodnie z tą odpowiedzią możesz użyć zdarzenia load jQuery na
window
obiekcie zamiastdocument
:Zostanie to uruchomione po załadowaniu całej zawartości strony. Różni się to od tego,
jQuery(document).load(...)
które jest uruchamiane po zakończeniu ładowania DOM.źródło
imagesLoaded Plugin to dobry wybór , jeśli potrzebujesz rozwiązania obsługującego różne przeglądarki
Jeśli potrzebujesz tylko obejścia IE, to wystarczy
źródło
W tej chwili we wtyczce ahpi.imgload.js znajduje się informacja, że jest ona obecnie zepsuta, a zamiast tego spróbuj tego sedna: https://gist.github.com/797120/7176db676f1e0e20d7c23933f9fc655c2f120c58
źródło
W przypadku obrazów tego samego pochodzenia możesz użyć:
źródło
może ta wtyczka może się przydać: http://www.farinspace.com/jquery-image-preload-plugin/
źródło
źródło
źródło
Stworzyłem własny skrypt, ponieważ znalazłem wiele wtyczek, które były dość rozdęte i po prostu chciałem, aby działał tak, jak chciałem. Mój sprawdza, czy każdy obraz ma wysokość (wysokość obrazu natywnego). Połączyłem to z funkcją $ (window) .load (), aby obejść problemy z buforowaniem.
Skomentowałem to dość mocno, więc powinno być interesujące, nawet jeśli go nie używasz. U mnie działa idealnie.
Bez zbędnych ceregieli, oto jest:
skrypt imgLoad.js.
źródło
Czekam na załadowanie wszystkich obrazów ...
Znalazłem odpowiedź na mój problem z jfriend00 tutaj jquery: jak odsłuchać zdarzenie załadowanego obrazu z jednego kontenera div? .. i „if (this.complete)”
Czekam na załadowanie wszystkich rzeczy i niektóre prawdopodobnie w pamięci podręcznej! .. i dodałem zdarzenie „błąd” ... działa solidnie we wszystkich przeglądarkach
Demo: http://jsfiddle.net/molokoloco/NWjDb/
źródło
window.load = function(){}
Jest w pełni obsługiwany przez wszystkie przeglądarki i uruchomi zdarzenie, gdy wszystkie obrazy zostaną w pełni załadowane.
https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload
źródło