2010-08-22 4 views
0

c'est ma première question ici, alors pardonnez si quelque chose est demandé mal :) Je veux précharger 3 images avant que la page Web soit chargée ainsi toutes apparaîtraient dans le même moment. En ce moment, les images sont chargées les unes après les autres et il semble un peu saccadé. Une image est définie dans css(), les deux autres sont un simple élément "img". J'ai essayé de créer des objets d'image javascript - les images sont toujours chargées, j'ai essayé de les précharger dans l'affichage: none; div - encore agité. Que devrais-je faire?Précharger des images avant les chargements de page Web

Merci.

+0

oublié de mentionner - les images ne peuvent être fusionnées ou utilisées comme sprite css, parce que 2 d'entre eux sont téléchargés utilisateur. – egis

+0

@egis Je m'excuse, je n'ai pas réalisé que la réponse que j'ai donnée était une solution à un autre problème. Je suppose que je n'avais pas assez lu votre question. –

+0

Pas de problème. Je suis vraiment surpris de voir combien les gens sont venus aider. Merci beaucoup à tous! – egis

Répondre

1

Cela fonctionne: (essayez ici: http://dl.dropbox.com/u/186012/demos/loadatonce/index.html)

<!-- jQuery is required --> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 

<!-- the images --> 
<div class="showmetoo" style="background: url(jimhance-vader_inset.jpg)"> 
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/></div> 

<img class="showall" src="octopus3.jpg" alt="a picture"><br/> 
<img class="showall" src="moorea.jpg" alt="a picture"><br/> 

<!-- hidden by default --> 
<style> 
img.showall { visibility: hidden } 
div.showmetoo { visibility: hidden } 
</style> 



<!-- the script --> 
<script type="text/javascript"> 
var remaining = $('.showall').length; 

function showthem(){ 
    remaining--; 
    if(!remaining){ 
    $('.showall').css('visibility', 'visible'); 
    $('.showmetoo').css('visibility', 'visible'); 
    } 
} 

// bind the callback to the load event of the pictures. 
$('.showall').bind('load',showthem); 

// force the pictures to show (just in case) 
setTimeout(showthem, 1000); //just in case load event fires before callback is set. 
</script> 
+0

Cela fonctionne bien! – egis

1

Une solution simple consiste à utiliser des URIs de données http://css-tricks.com/data-uris/

http://www.nczonline.net/blog/2010/07/06/data-uris-make-css-sprites-obsolete/

Je pense que cela devrait probablement corriger.

Les URI de données ont certaines limitations en ce qui concerne IE, mais je pense que dans ce cas, vous devriez simplement appeler cela une dégradation gracieuse. :)

Editer: J'ai vu l'affichage de votre mention: aucun divs. L'affichage des non-div ne préchargera PAS vos images. Vous devez définir l'affichage pour bloquer et masquer le div d'une autre manière. Réglage de l'index z ou du décalage -9999 ou de certains d'entre eux.

+0

Intéressant, ne l'ai jamais vu auparavant. Mais jusqu'à jdc0589

+1

@ jdc0589 Eh bien c'est assez simple de spécifier des URL normales pour IE et uris pour le reste. – Mark

+0

D'accord. Cela me fait du bien de priver les utilisateurs d'IE d'une fonctionnalité (sérieusement). – jdc0589

1

La solution la plus simple est probablement d'afficher un gif de chargement pour les trois images jusqu'à ce qu'elles soient toutes chargées, puis de remplacer le gif par l'image réelle.

Questions connexes