2010-03-05 3 views
2

Хей, я использую этот скриптподжать кучу изображений из массива имен файлов, выполните функцию после того, как 50% сделали

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); 
     }; 

    } 

и передавая кучу изображений в нее для предварительной загрузки.

функция проверки() это

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

Но это не кажется, работает.

Любые идеи? Или есть что-нибудь, что я могу использовать в Интернете уже?

+0

Не забудьте отметить ответ, принятый, если он работает, или прокомментировать, если это не так. –

ответ

1

Дело в том, что вы установили только 1 imageObj и изменяя его источник и обработчик событий. Почему бы вам не попробовать создать объект изображения для каждого изображения? (в вашей петле).

Чтобы быть более конкретным:

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

В чем разница, когда вы все-таки переписываете imageObj? –

+0

Если вы измените один и тот же объект, браузер перестанет загружать ранее установленный src. Кроме того, вы получите только событие загрузки для последнего изображения, чего вы не хотите. Кроме того, это должно быть .onload, а не .onLoad. – foolip

0

images.length/2 не будет целым числом, если в массиве имеется нечетное количество изображений, поэтому оно не будет равно i в функции проверки. Попробуйте 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

Я думаю, что есть проблема с imageObj.onLoad(). Функция, кажется, не вызывается после загрузки изображения, но после того, как изображение было запрошено. Есть идеи? – dotty

+1

Ах, возможно, добавьте событие перед установкой 'src' - я изменил свой код, чтобы показать это сейчас. –

+0

Я не понимаю этого комментария. На ваш вопрос вы сказали, что хотите выполнить действие после загрузки 50 процентов? –

0

Он не будет работать. Предположим, у вас есть 100 изображений. Изображения загружаются асинхронно. Если первое загруженное изображение представляет собой номер изображения 50, тогда функция скажет, что загружено 50 изображений, а загружено только 1 изображение.