2016-02-21 2 views
0

J'expérimentais avec quelques images de grandes tailles de fichier à utiliser dans une galerie. J'essaie de le faire de la manière la plus simple possible. Ici, je me sers seulement quelques exemples d'images:Préchargement des images de la galerie. JavaScript (sans JQuery)

var imageGallery = ["nebula.jpg", "galaxy.jpg", "blackHole.jpg"]; 

for (var i = 0; i < imageGallery.length - 1; i++) { 
    var img = new Image(); 
    img.src = imageGallery[i]; 
} 

Je compris que ce code serait que les images sont mises en cache avant d'être utilisées par le reste du script, mais il ne fonctionne pas.

L'aide serait appréciée.

+0

Quelle partie ne fonctionne pas exactement? –

+0

Lorsque j'ouvre la page après avoir effacé le cache, la première image commence à se charger immédiatement, rangée par rangée de haut en bas, puis les autres images se chargent trop rapidement. Une fois que tout est chargé, le diaporama fonctionne normalement - mais c'est un désordre au début. – Jason210

Répondre

0

Peut-être que le serveur envoie des en-têtes qui empêchent la mise en cache, comme:

Cache-Control: no-cache, no-store, must-revalidate 
Pragma: no-cache 
Expires: 0 
+0

Merci. Ce serait étrange. Y at-il autre chose que je puisse faire pour m'assurer que lorsque je veux afficher ces images, elles sont prêtes? – Jason210

+0

@ Jason210 il y a aussi la fonction onload qui peut vous aider à vous assurer qu'ils sont tous chargés, jetez un oeil à cette réponse: http://stackoverflow.com/questions/12354865/image-onload-event-and-browser-cache –

1

Vous cherchez une sorte de rappel async, vous devez faire quelque chose comme ceci:

// Grab reference to image on page 
var img = document.getElementById("blah"); // Or whatever you need to do 

// Create new image from your list 
var galleryImage = new Image(); 

// Create a callback that will start once you assign the src attribute to img 
galleryImage.onload = function() { 

    // Here you could disable a loading icon or something, because your image is ready to go 
    img.src = this.src; 
} 

// Kickoff everything 
galleryImage.src = "www.myimage.com/path"; 

Dans votre code qui pourrait ressembler à ceci:

var imageGallery = ["nebula.jpg", "galaxy.jpg", "blackHole.jpg"]; 

for (var i = 0; i < imageGallery.length - 1; i++) { 
    var img = document.document.getElementsByTagName('img')[i]; 
    var galleryImage = new Image(); 

    galleryImage.onload = function() { 
     img.src = this.src; 
    } 

    galleryImage.src = imageGallery[i]; 
} 
+0

Merci. est-ce correct de faire une fonction dans une boucle comme ça? – Jason210

+0

Il y a certainement beaucoup de fois où vous ne voudriez pas mettre une fonction asynchrone à l'intérieur d'une boucle comme ça, mais dans ce cas ça ira. – Tyler