2013-05-27 4 views
1

Следующий фрагмент Javascript предназначен для предварительной загрузки изображения, установить фоновый режим Div на изображение, а затем исчезает все DIV в ...Javascript перегрузочный загруженного изображения

$("<img/>") 
    .attr("src", "../services/imageResize.php?img=" + img + "&width=150") 
    .load(function(e){ 
     $("<div/>", { 
      class: "smallThumb" 
     }) 
     .css("background", "url(" + $(this).attr("src") + ") no-repeat center center") 
     .appendTo(images) 
     .fadeIn(500); 

     if(count == imgTotal) 
     { 
      loadingImages = false; 
      images.css("background","#fff"); 
     } 
    }); 
count++; 

Я проверил его в Chrome и Сафари; оба исчезают в div, а затем заканчивают загрузку изображения. Я недоумеваю, что заставляет его перезагружать изображение для инструкции .css.

+2

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

+0

Есть две части, кэширование хорошее, а не загрузка DOM src с большим изображением и позволяющая CSS выполнять работу другой. кеширование просто скрывает проблему кодирования. –

+0

Как сказал Марк Б, поскольку вы получаете изображение из скрипта PHP, заголовки могут быть настроены на отсутствие кеша вашим веб-сервером. Если хотите, отправьте ссылку на одно из этих изображений, чтобы мы могли проверить. – darma

ответ

0

Вы пробовали жестко кодировать изображение на странице и видеть, что происходит? Часть проблемы заключается в том, что вы передаете параметры URL, которые могут сделать изображения уникальными друг для друга.

+1

комментарий, не ответ. – darma

0

Это две разные вещи. HTML DOM и CSS, он будет загружать его дважды. Они оба не знают друг о друге. Просто потому, что вы используете ту же самую строку src, это не означает, что они используют один и тот же контент изображения src. Я бы проверил это с изображением src, установленным на один пиксельный тип вещи, а затем загрузив фон. Это хорошо документированный подход к CSS-образам. Также кэширование может помочь, по крайней мере, не запрашивать его дважды с сервера. Хорошая вещь, чтобы сделать так или иначе.

+0

ОН и прекратите использовать img возьмите для css фона. Часть img действительно бессмысленно смотрит на ваш код, css устанавливает фон для div. –

0

Я думаю, ваша проблема в том, что событие onload срабатывает до того, как изображение будет полностью загружено. Если вы предполагаете, что изображение полностью загружено, оно будет выглядеть как перезагрузка.

img.onload будет запускаться всякий раз, когда баузер готов отображать изображение. Нельзя гарантировать, что изображение будет полностью загружено. Единственный способ проверить, полностью ли загружено изображение, - это атрибут img.complete.

Некоторое время назад я ответил на вопрос How to monitor an image source for fully loaded status

После ответа я написал небольшую jQuery plugin which utilizes the complete attribute.

Вы можете использовать его, например.

$(function() { 
    $.preload('your-image.png').progress(function (img) { 
     // set background 
     $('body').css('background', 'url(' + img.src + ')'); 
    }); 
}); 
Смежные вопросы