2010-03-05 7 views
2

Hay, j'utilise ce scriptprécharger un tas d'images à partir d'un tableau de noms de fichiers, ne fonctionnent après 50% sont effectuées

function preloader(images){ 
     var i = 0; 
     imageObj = new Image(); 


     // start preloading 
     for(i=0; i<=images.length; i++){ 
      imageObj.src=images[i]; 
      imageObj.onLoad = check(i, images.length/2); 
     }; 

    } 

et passer un tas d'images en à précharger.

la vérification() est ce

check = function(e,i){ 
     if(e == i){ 
      run_fading_gallery(imgcode); 
      $(".loading").hide(); 
     }; 
    } 

Mais il ne semble pas fonctionner.

Des idées? Ou y a-t-il quelque chose que je peux utiliser en ligne déjà?

+0

N'oubliez pas de marquer une réponse comme acceptée si cela fonctionne, ou commenter si ce n'est pas le cas. –

Répondre

1

La chose est que vous définissez seulement 1 imageObj et modifier sa source et gestionnaire d'événements. Pourquoi n'essayez-vous pas de créer un objet image pour chaque image? (dans votre boucle).

Pour être plus précis:

function preloader(images){ 
     var i = 0; 

     // start preloading 
     for(i=0; i<=images.length; i++){ 
      imageObj = new Image(); 
      imageObj.src=images[i]; 
      imageObj.onLoad = check(i, images.length/2); 
     }; 

    } 
+0

Quelle est la différence, quand vous réécrivez l'imageObj de toute façon? –

+0

Si vous modifiez le même objet, le navigateur arrêtera de charger le src précédemment défini. De plus, vous n'obtiendrez qu'un événement de chargement pour la dernière image, ce qui n'est pas ce que vous voulez. En outre, il devrait être .onload, pas .onLoad. – foolip

0

images.length/2 ne sera pas un nombre entier s'il y a un nombre impair d'images dans le tableau, donc il ne sera jamais égal à i dans la fonction de vérification. Essayez Math.floor:

function preloader(images){ 
    var i = 0; 
    imageObj = new Image(); 


    // start preloading 
    for(i=0; i<=images.length; i++){ 

     imageObj.onLoad = check(i, Math.floor(images.length/2)); 
     imageObj.src=images[i]; 
    }; 

} 
+0

Je pense qu'il y a un problème avec imageObj.onLoad(). La fonction ne semble pas être appelée une fois l'image chargée, mais une fois l'image demandée. Des idées? – dotty

+1

Ah, peut-être ajouter l'événement avant de définir le 'src' - J'ai modifié mon code pour le montrer maintenant. –

+0

Je ne comprends pas ce commentaire. Dans votre question, vous avez dit que vous vouliez effectuer une action après que 50% aient été chargés? –

0

Il ne fonctionnera pas. Supposons que vous avez 100 images. Les images sont chargées de manière asynchrone. Si la première image chargée est le numéro d'image 50, la fonction indique que 50 images ont été chargées, alors qu'une seule image est chargée.