2016-02-21 4 views
0

Я экспериментировал с некоторыми изображениями больших размеров файлов, которые будут использоваться в галерее. Я пытаюсь сделать это самым простым способом. Здесь я использую только несколько примеров изображения:Предварительная загрузка изображений галереи. JavaScript (без 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]; 
} 

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

Справка будет принята с благодарностью.

+0

Какая часть не работает? –

+0

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

ответ

0

Возможно, сервер отправляет заголовки, которые предотвращают кэширование, как:

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

Спасибо. Это было бы странно. Есть ли что-нибудь еще, что я могу сделать, чтобы убедиться, что, когда я хочу отображать эти изображения, они готовы? – Jason210

+0

@ Jason210 есть функция onload, которая может помочь вам убедиться, что все они загружены, посмотрите на этот ответ: http://stackoverflow.com/questions/12354865/image-onload-event-and-browser-cache –

1

Вы ищете какой-то асинхронным обратного вызова, вы должны сделать что-то вроде этого:

// 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"; 

В своем коде, который может выглядеть примерно так:

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

Благодарю. это нормально делать функцию в таком цикле? – Jason210

+0

Существует, конечно, много раз, когда вы не хотели бы помещать функцию async внутри цикла таким образом, но в этом случае все будет хорошо. – Tyler

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