In jQuery, wenn Sie dies tun:
$(function() {
alert("DOM is loaded, but images not necessarily all loaded");
});
Es wartet darauf, dass das DOM geladen wird, und führt Ihren Code aus. Wenn nicht alle Bilder geladen sind, wird der Code trotzdem ausgeführt. Dies ist offensichtlich das, was wir wollen, wenn wir DOM-Inhalte initialisieren, z. B. Elemente ein- oder ausblenden oder Ereignisse anhängen.
Nehmen wir jedoch an, ich möchte eine Animation und möchte nicht, dass sie ausgeführt wird, bis alle Bilder geladen sind. Gibt es in jQuery einen offiziellen Weg, dies zu tun?
Der beste Weg, den ich habe, ist zu benutzen <body onload="finished()">
, aber ich möchte das nicht wirklich tun, es sei denn, ich muss.
Hinweis: In jQuery 1.3.1 in Internet Explorer ist ein Fehler aufgetreten, der darauf wartet, dass alle Bilder geladen werden, bevor Code ausgeführt wird $function() { }
. Wenn Sie diese Plattform verwenden, erhalten Sie das gesuchte Verhalten anstelle des oben beschriebenen korrekten Verhaltens.
$("img").load()
?Antworten:
Mit jQuery können Sie
$(document).ready()
etwas ausführen, wenn das DOM geladen ist, und$(window).on("load", handler)
etwas ausführen, wenn auch alle anderen Dinge geladen sind, wie z. B. die Bilder.Der Unterschied ist in der folgenden vollständigen HTML-Datei zu sehen, sofern Sie über
jollyroger
JPEG-Dateien (oder andere geeignete) verfügen :Damit erscheint das Warnfeld, bevor die Bilder geladen werden, da das DOM zu diesem Zeitpunkt bereit ist. Wenn Sie dann ändern:
in:
Dann wird das Warnfeld erst angezeigt, nachdem die Bilder geladen wurden.
Um zu warten, bis die gesamte Seite fertig ist, können Sie Folgendes verwenden:
quelle
Ich habe ein Plugin geschrieben, das Rückrufe auslösen kann, wenn Bilder in Elemente geladen wurden, oder einmal pro geladenem Bild.
Es ist ähnlich
$(window).load(function() { .. })
, außer dass Sie damit einen zu überprüfenden Selektor definieren können. Wenn Sie nur wissen möchten, wann alle Bilder in#content
(zum Beispiel) geladen wurden, ist dies das Plugin für Sie.Es unterstützt auch das Laden von Bildern in der CSS verweisen, wie
background-image
,list-style-image
etc.waitForImages jQuery Plugin
Beispiel Verwendung
Beispiel auf jsFiddle .
Weitere Dokumentation finden Sie auf der GitHub-Seite.
quelle
('img selector').each(function(index) { var offset = $(this).offset(); ...});
Offset.top ist jedoch immer noch Null. Warum?$(window).load()
funktioniert nur beim ersten Laden der Seite. Wenn Sie dynamische Dinge tun (Beispiel: Klicken Sie auf die Schaltfläche, warten Sie, bis einige neue Bilder geladen sind), funktioniert dies nicht. Um dies zu erreichen, können Sie mein Plugin verwenden:Demo
Herunterladen
quelle
Yevgeniy Afanasyev
der Antwort erwähnt , leistet imagesLoaded hier viel bessere Arbeit und deckt den von Ihnen erwähnten Anwendungsfall zusammen mit vielen anderen Eckfällen ab (siehe die gelösten Github-Probleme) .Für diejenigen, die über den Abschluss des Downloads eines einzelnen Bildes benachrichtigt werden möchten, das nach einem
$(window).load
Brand angefordert wird, können Sie dasload
Ereignis des Bildelements verwenden .z.B:
quelle
Keine der bisherigen Antworten hat die einfachste Lösung geliefert.
quelle
Ich würde empfehlen,
imagesLoaded.js
Javascript-Bibliothek zu verwenden.Warum nicht jQuery's verwenden
$(window).load()
?Wie unter /programming/26927575/why-use-imagesloaded-javascript-library-versus-jquerys-window-load/26929951 beantwortet
Andere gute Gründe für die Verwendung von geladenen Bildern
Ressourcen
quelle
Mit jQuery komme ich mit diesem ...
Demo: http://jsfiddle.net/molokoloco/NWjDb/
quelle
Verwenden Sie imagesLoaded PACKAGED v3.1.8 (6,8 KB, wenn minimiert). Es ist relativ alt (seit 2010), aber immer noch aktives Projekt.
Sie finden es auf github: https://github.com/desandro/imagesloaded
Ihre offizielle Website: http://imagesloaded.desandro.com/
Warum ist es besser als zu verwenden:
Weil Sie Bilder möglicherweise dynamisch laden möchten, wie folgt : jsfiddle
quelle
Auf diese Weise können Sie eine Aktion ausführen, wenn alle Bilder im Körper oder in einem anderen Container (der von Ihrer Auswahl abhängt) geladen werden. PURE JQUERY, keine Pluggins erforderlich.
quelle
Meine Lösung ähnelt Molokoloco . Geschrieben als jQuery-Funktion:
Beispiel:
quelle