2010-09-08 3 views
3

J'ajoute un certain nombre de grandes images pour un diaporama à une page, mais je veux commencer à charger ces images uniquement lorsque la partie normale de la page est complètement chargée (y compris les images).

Pour ce faire, je suis d'ajouter les images dans la fonction $(window).load():

var slide_total = 20; 

$(window).load(function() { 

    for (i = 2; i <= slide_total; i++) 
    { 
     content = '<li><img src="/images/header' + ((i < 10) ? '0' : '') + i + '.jpg" width="960" height="314"></li>'; 
     $("#slideshow li:last-child").after(content); 
    } 

    slide_interval = setInterval("slideSwitch()", slide_duration); 

}); 

Le diaporama slideSwitch() devrait commencer lorsque toutes les images sont complètement chargées, mais comme il est maintenant, il commence à l'heure actuelle la les éléments sont ajoutés au DOM.

Je ne peux pas déplacer la boucle vers la fonction document.ready car je ne veux pas que le diaporama interfère avec le chargement des images normales.

Comment puis-je vérifier si toutes les images sont chargées avant de régler l'intervalle?

+0

window.load attend certainement pour que tout charger avant de tirer – Galen

+0

@Galen, je sais, mais comme vous pouvez le voir, les images vous ajoute à window.load lui-même, il a déjà viré. – jeroen

+0

ahh oui, j'ai mal compris votre question – Galen

Répondre

4

Essayez ceci:

// get the total number of images inserted in the DOM 
var imgCount = $('#slideshow img').length; 

// initialize a counter which increments whenever an image finishes loading 
var loadCounter = 0; 

// bind to the images' load event 
$("#slideshow li img").load(function() { 

    // increment the load counter 
    loadCounter++; 

    // once the load counter equals the total number of images 
    // set off the fancy stuff 
    if(loadCounter == imgCount) { 
     slide_interval = setInterval("slideSwitch()", slide_duration); 
    } 
}).each(function() { 

    // trigger the load event in case the image has been cached by the browser 
    if(this.complete) $(this).trigger('load'); 
}); 
+0

Juste pour ajouter, j'utilise avec succès la technique ci-dessus dans l'une de nos applications Web, ce qui nécessite que quelque chose se déclenche une fois que toutes les images dans une partie du document sont complètement chargées. – karim79

+0

Merci, mais cela ne semble pas fonctionner. Dans IE8 et IE7, le diaporama commence pendant le chargement des images. Etes-vous sûr que la méthode jquery 'load()' peut être utilisée comme ça? – jeroen

+0

@jeroen - oui, je suis assez sûr :) Comptez-vous les bonnes images? Je veux dire, essayez d'alerter le nombre d'images pour s'assurer qu'il est correct. – karim79

Questions connexes