2013-02-21 2 views
0

Я пытаюсь создать простое слайд-шоу jQuery, которое не загружает все изображения при запуске, следующее изображение, которое будет использоваться, вместо этого будет загружаться асинхронно, чтобы уменьшить размер страницы.jQuery цикл слайд-шоу с асинхронно загруженными изображениями

У меня есть слайд-шоу, но предварительная загрузка следующего изображения, похоже, не работает полностью?

Exaple JQuery

var i = 2; 
var total = 9; 

var obj = setInterval(function(){  

    $(".slides_container img").fadeOut("slow", function(){ 
     $(this).attr("src" ,"/images/slide-" + i + ".jpg").load(function() { 
      $(this).fadeIn(); 
     }); 
    }); 

    if(i < total){ 
     i++; 
     //Preload Next Image 
     (new Image()).src = "/images/slide-" + i + ".jpg"; 
    } 
    else 
     i = 1; 
}, 4000); 

Возможная причина проблемы

линия под натягом комментарий, необходимо загрузить следующий файл, однако код выделен ниже, кажется, не использовать любые кэшированные изображения, но вместо этого вытащите их с сервера снова?

Я должен был использовать .load() сделать .fadeIn() работу правильно

$(this).attr("src" ,"/images/slide-" + i + ".jpg").load(function() { 
    $(this).fadeIn(); 
}); 
+0

Вам нужно подключить событие нагрузки befo вы указываете SRC. –

+0

@Diodeus Как его заказать в пределах нагрузки? '$ (". slides_container img "). fadeOut (" slow ", function() { $ (this) .load (function() { $ (". slides_container img "). attr (" src ","/изображения/слайд/выполнения слайд- "+ I +" .jpg "); \t \t \t \t $ (" slides_container IMG ") FadeIn();.. }); }); ' – Dan

+0

$ (this) .load (...); в одной строке, тогда установка SRC будет второй. Вы можете столкнуться с ситуациями, когда изображение кэшируется и загружается до того, как обработчик события зарегистрирован в противном случае. –

ответ

2
$(this).attr("src" ,"/images/slide-" + i + ".jpg").load(function() { 
    $(this).fadeIn(); 
}); 

Должно быть:

$(this).load(function() { 
    $(this).fadeIn(); 
}); 

$(this).attr("src" ,"/images/slide-" + i + ".jpg") 

Или попробуйте::

$(this).onload = function() { 
    .... 
}) 
+0

Я обычно делаю это через прямой JS. Попробуйте «onload» вместо «load». –

+0

он отлично работает сейчас, я думаю: http://iwouldrun500miles.com, спасибо за помощь! – Dan

Смежные вопросы