Добавление предварительно загруженного изображения в HTML с использованием тега img приводит к повторной загрузке изображения

#jquery

#jquery

Вопрос:

При загрузке я предварительно загружаю несколько изображений, используя следующее:

 var temp = '<img src="' image_src '" />',
    target = '#' currentId;     

$(temp).on('load', function() {
    $(target).data('loaded','y');
});
  

Затем, когда мне нужно вызвать изображение, я добавляю его в документ с помощью:

 var $image = '<img src="' image_src '" />';

$('.image-container').html($image);
  

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

Я полагал, что, предварительно загрузив src изображения, оно добавит это из кэша браузера при добавлении в html.

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

Ответ №1:

Проблема в том, что вы создаете два отдельных <img /> элемента. Первое, которое вы создаете в памяти и выполняете предварительную загрузку. Второе изображение вы создаете совершенно отдельно и добавляете к .image-container в DOM.

Чтобы устранить проблему, просто добавьте первое изображение, которое было предварительно загружено в .image-container . Также обратите внимание, что было бы разумнее выполнить это append() внутри load() обработчика событий, поскольку таким образом вы можете быть уверены, что изображение было загружено.

 var image_src = 'https://i.imgur.com/RVAJHpS.png';
var $img = $('<img src="'   image_src   '" />');
var $target = $('#target');

$img.on('load', function() {
  $target.data('loaded', 'y');
  $('.image-container').append($img);
});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="target"></div>
<div class="image-container"></div>  

Комментарии:

1. Спасибо, Рори, что нашел время показать мне мою ошибку! Наконец-то я «понял»!