Je veux définir une image d'arrière-plan sur la balise body, puis exécuter du code - comme ceci:
$('body').css('background-image','http://picture.de/image.png').load(function() {
alert('Background image done loading');
// This doesn't work
});
Comment puis-je m'assurer que l'image d'arrière-plan est entièrement chargée?
javascript
jquery
Peter
la source
la source
Image()
objet qui a unonload
événement.url()
Réponses:
essaye ça:
cela créera une nouvelle image en mémoire et utilisera l'événement load pour détecter le chargement du src.
la source
javascript:void($('<img/>').attr('src', 'http://farm6.static.flickr.com/5049/5220175127_5693faf952.jpg').load(function() { $('html').css('background-image', 'url(http://farm6.static.flickr.com/5049/5220175127_5693faf952.jpg)'); }))
et vérifiez les requêtes HTTP dans Firebug. Si j'ai ouvert la page scintillante avec cette image ouverte dans un autre onglet, il ne fait aucune requête HTTP, affichez simplement cette image instantanément. et quand je vide le cache et l'exécute, il y avait une demande..remove()
à$('<img/>')
object pour éviter une fuite de mémoire. Vous devriez voir une consommation de mémoire stable sur le premier test et une augmentation de la mémoire sur le second. Après quelques heures de fonctionnement sur Chrome 28, le premier test prend 80 Mo et le second 270 Mo.J'ai un plugin jQuery appelé
waitForImages
qui peut détecter le téléchargement des images d'arrière-plan.la source
each
rappel.delay()
ça ne marche pas comme ça.Quelque chose comme ça:
la source
bg.replace( ... , my_src )
. Mais ma question est: une fois le $ ('<img>') chargé, que se passe-t-il exactement avec ça<img>
... Je veux dire que ce n'est pas vraiment réel - c'est juste un espace réservé factice, non?<img>
n'est jamais inséré dans le DOM; il est juste utilisé pour "tromper" le navigateur en chargeant le fichier image dans le cache.Il n'y a pas de callback JS pour les actifs CSS.
la source
pure solution JS qui ajoutera un préchargeur, définira l'image d'arrière-plan, puis la configurera pour le garbage collection avec son écouteur d'événements :
Version courte:
Un peu plus longtemps avec une belle transition d'opacité:
la source
Voici un petit plugin que j'ai créé pour vous permettre de faire exactement cela, il fonctionne également sur plusieurs images d'arrière-plan et plusieurs éléments:
Lire l'article:
http://catmull.uk/code-lab/background-image-loaded/
ou allez directement au code du plugin:
http://catmull.uk/downloads/bg-loaded/bg-loaded.js
Il suffit donc d'inclure le plugin, puis de l'appeler sur l'élément:
Téléchargez évidemment le plugin et stockez-le sur votre propre hébergement.
Par défaut, il ajoute une classe supplémentaire "chargée par bg" à chaque élément correspondant une fois l'arrière-plan chargé, mais vous pouvez facilement changer cela en lui passant une fonction différente comme celle-ci:
Voici un codepen démontrant qu'il fonctionne.
http://codepen.io/catmull/pen/Lfcpb
la source
J'ai localisé une solution qui fonctionnait mieux pour moi, et qui a l'avantage d'être utilisable avec plusieurs images (cas non illustré dans cet exemple).
D'après la réponse de @ adeneo à cette question :
la source
J'ai fait un hack pur javascript pour rendre cela possible.
Ou
css:
la source
https://github.com/alexanderdickson/waitForImages
la source