Dans jQuery lorsque vous faites cela:
$(function() {
alert("DOM is loaded, but images not necessarily all loaded");
});
Il attend que le DOM se charge et exécute votre code. Si toutes les images ne sont pas chargées, il exécute toujours le code. C'est évidemment ce que nous voulons si nous initialisons des éléments DOM tels que l'affichage ou le masquage d'éléments ou l'attachement d'événements.
Disons cependant que je veux une animation et je ne veux pas qu'elle s'exécute tant que toutes les images ne sont pas chargées. Existe-t-il un moyen officiel dans jQuery de le faire?
La meilleure façon dont je dispose est de l'utiliser <body onload="finished()">
, mais je ne veux vraiment le faire que si je le dois.
Remarque: Il existe un bogue dans jQuery 1.3.1 dans Internet Explorer qui attend en fait que toutes les images se chargent avant d'exécuter du code à l'intérieur $function() { }
. Donc, si vous utilisez cette plate-forme, vous obtiendrez le comportement que je recherche au lieu du comportement correct décrit ci-dessus.
$("img").load()
fonctionne pas ?Réponses:
Avec jQuery, vous utilisez
$(document).ready()
pour exécuter quelque chose lorsque le DOM est chargé et$(window).on("load", handler)
pour exécuter quelque chose lorsque toutes les autres choses sont également chargées, telles que les images.La différence peut être vue dans le fichier HTML complet suivant, à condition que vous ayez un
jollyroger
fichier JPEG (ou d'autres fichiers appropriés):Avec cela, la boîte d'alerte apparaît avant le chargement des images, car le DOM est prêt à ce stade. Si vous changez ensuite:
dans:
alors la boîte d'alerte n'apparaît qu'après le chargement des images.
Par conséquent, pour attendre que la page entière soit prête, vous pouvez utiliser quelque chose comme:
la source
J'ai écrit un plugin qui peut déclencher des rappels lorsque les images se sont chargées dans les éléments, ou se déclencher une fois par image chargée.
Il est similaire à
$(window).load(function() { .. })
, sauf qu'il vous permet de définir n'importe quel sélecteur à vérifier. Si vous voulez seulement savoir quand toutes les images#content
(par exemple) ont été chargées, c'est le plugin pour vous.Il prend également en charge le chargement des images référencées dans le CSS, par exemple
background-image
,list-style-image
, etc.Le plugin waitForImages jQuery
Exemple d'utilisation
Exemple sur jsFiddle .
Plus de documentation est disponible sur la page GitHub.
la source
('img selector').each(function(index) { var offset = $(this).offset(); ...});
cependant, offset.top est toujours nul. Pourquoi?$(window).load()
ne fonctionnera que la première fois que la page sera chargée. Si vous faites des choses dynamiques (exemple: cliquez sur le bouton, attendez que de nouvelles images soient chargées), cela ne fonctionnera pas. Pour y parvenir, vous pouvez utiliser mon plugin:Démo
Télécharger
la source
Yevgeniy Afanasyev
la réponse de , imagesLoaded fait un bien meilleur travail à ce sujet et couvre le cas d'utilisation que vous avez mentionné ainsi que de nombreux autres cas d'angle (voir les problèmes de github résolus) .Pour ceux qui souhaitent être informés de la fin du téléchargement d'une seule image qui est demandée après les
$(window).load
incendies, vous pouvez utiliser l'load
événement de l'élément image .par exemple:
la source
Jusqu'à présent, aucune des réponses n'a donné ce qui semble être la solution la plus simple.
la source
Je recommanderais d'utiliser la
imagesLoaded.js
bibliothèque javascript.Pourquoi ne pas utiliser jQuery
$(window).load()
?Comme répondu sur /programming/26927575/why-use-imagesloaded-javascript-library-versus-jquerys-window-load/26929951
Autres bonnes raisons d'utiliser des images chargées
Ressources
la source
Avec jQuery je viens avec ça ...
Démo: http://jsfiddle.net/molokoloco/NWjDb/
la source
Utilisez imagesLoaded PACKAGED v3.1.8 (6,8 Ko lorsqu'il est réduit). C'est un projet relativement ancien (depuis 2010) mais toujours actif.
Vous pouvez le trouver sur github: https://github.com/desandro/imagesloaded
Leur site officiel: http://imagesloaded.desandro.com/
Pourquoi c'est mieux que d'utiliser:
Parce que vous voudrez peut-être charger des images dynamiquement, comme ceci: jsfiddle
la source
De cette façon, vous pouvez exécuter une action lorsque toutes les images à l'intérieur du corps ou de tout autre conteneur (qui dépend de votre sélection) sont chargées. PURE JQUERY, aucun plugin nécessaire.
la source
Ma solution est similaire à molokoloco . Écrit en tant que fonction jQuery:
exemple:
la source