Officiel pour demander jQuery attendre que toutes les images à charger avant l'exécution de quelque chose
En jQuery lorsque vous faites cela:
$(function() {
alert("DOM is loaded, but images not necessarily all loaded");
});
Il attend pour les DOM à charge et exécute votre code. Si toutes les images ne sont pas chargées puis il encore exécute le code. C'est évidemment ce que nous voulons si nous sommes à l'initialisation de toutes les DOM des choses telles que les affichant ou en masquant des éléments ou d'attacher des événements.
Disons que si je veux de l'animation et je ne veux pas en cours d'exécution jusqu'à ce que toutes les images sont chargées. Est-il un moyen officiel de jQuery pour faire ça?
La meilleure façon que j'ai est d'utiliser <body onload="finished()">
, mais je ne veux pas vraiment à le faire que si je dois le faire.
Remarque: Il y a un bug dans jQuery 1.3.1 dans Internet Explorer qui fait en fait attendre que toutes les images à charger avant l'exécution de code à l'intérieur de $function() { }
. Donc, si vous êtes en utilisant cette plate-forme, vous aurez le comportement, je suis à la recherche au lieu de la corriger le comportement décrit ci-dessus.
- ne pas
$("img").load()
travail? - Je pense qu'il vaut de mentionner que si vous définissez les dimensions des attributs, vous ca en toute sécurité exécuter un code en fonction ready qui s'appuient sur ces dimensions. Avec php, vous pouvez les attraper avec php.net/manual/en/function.getimagesize.php sur télécharger pour les stocker en db ou avant la sortie du navigateur.
- si vous voulez quelque chose de faire un travail incroyable, alors découvrez la très bonne & populaire imagesloaded bibliothèque javascript mentionnés dans cette réponse, en dessous de stackoverflow.com/a/26458347/759452
- "Ici, je suis venu pour trouver de tout, sauf d'une manière officielle."
Vous devez vous connecter pour publier un commentaire.
Avec jQuery, vous utilisez
$(document).ready()
pour exécuter quelque chose quand le DOM est chargé et$(window).on("load", handler)
à exécuter quelque chose, quand toutes les autres choses sont chargés, tels que les images.La différence peut être vu dans la suite complète fichier HTML, si vous avez un
jollyroger
fichiers JPEG (ou autre celles qui conviennent):Avec cela, la boîte d'alerte s'affiche avant que les images sont chargées, parce que le DOM est prêt à ce point. Si vous modifiez ensuite:
dans:
puis la boîte d'alerte n'apparaît pas jusqu'à ce que après les images sont chargées.
Donc, attendre jusqu'à ce que la totalité de la page est prête, vous pouvez utiliser quelque chose comme:
J'ai écrit un plugin qui peut tirer des rappels lorsque les images ont été téléchargées dans les éléments, ou un incendie, une fois par image chargée.
Il est semblable à
$(window).load(function() { .. })
, sauf qu'il vous permet de définir n'importe quel sélecteur à vérifier. Si vous voulez savoir quand toutes les images dans#content
(par exemple) ont chargé, c'est le plugin pour vous.Il prend également en charge le chargement des images référencées dans le CSS, comme
background-image
,list-style-image
, etc.waitForImages plugin jQuery
Exemple D'Utilisation
Exemple sur jsFiddle.
Plus la documentation est disponible sur le GitHub de la page.
('img selector').each(function(index) { var offset = $(this).offset(); ...});
, cependant, le décalage.top est toujours égale à zéro. Pourquoi?$(window).load()
fonctionnera uniquement la première fois que la page est chargée. Si vous faites de la dynamique des trucs (exemple: cliquez sur le bouton, attendre quelques nouvelles images pour la charge), cela ne fonctionne pas. Pour ce faire, vous pouvez utiliser mon plugin:Démo
Télécharger
Yevgeniy Afanasyev
's réponse, imagesLoaded fait un bien meilleur travail à ce & couvrir les cas d'utilisation que vous avez mentionné le long avec de nombreux autres cas de coin (voir l'résolu github questions).Pour ceux qui veulent être informés de la fin du téléchargement d'une image unique qui obtient demandé après
$(window).load
feux, vous pouvez utiliser l'image de l'élémentload
événement.par exemple:
Aucune réponse jusqu'à présent ont donné à ce qui semble être la solution la plus simple.
Je vous conseille d'utiliser
imagesLoaded.js
bibliothèque javascript.Pourquoi ne pas utiliser du jQuery
$(window).load()
?Comme ansered sur https://stackoverflow.com/questions/26927575/why-use-imagesloaded-javascript-library-versus-jquerys-window-load/26929951
D'autres bonnes raisons d'utiliser imagesloaded
Ressources
Avec jQuery-je venir avec cette...
Démo : http://jsfiddle.net/molokoloco/NWjDb/
Utilisation imagesLoaded EMBALLÉS v3.1.8 (6.8 Kb lorsqu'il est réduit). Il est relativement ancienne (depuis 2010), mais toujours active du projet.
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:
Car vous pouvez charger des images de façon dynamique, comme ceci: jsfiddle
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és. PURE JQUERY, pas de pluggins nécessaire.
Ma solution est similaire à molokoloco. Écrite comme une fonction jQuery:
exemple: