изображение.события onload и кэш браузера



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



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



var img = new Image();
img.src = "img.jpg";
img.onload = function () {
alert("image is loaded");
}
481   5  

5 ответов:

как вы генерируете изображение динамически, установите onload собственность до src.

var img = new Image();
img.onload = function () {
   alert("image is loaded");
}
img.src = "img.jpg";

Скрипка - протестировано на последних версиях Firefox и Chrome.

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

var img = new Image();
// 'load' event
$(img).on('load', function() {
  alert("image is loaded");
});
img.src = "img.jpg";

Скрипка

есть два возможных решения для подобных ситуаций:

  1. использовать решение, предложенное на сайте этот пост
  2. добавить уникальный суффикс к изображению src чтобы заставить браузер загрузить его снова, например:

    var img = new Image();
    img.src = "img.jpg?_="+(new Date().getTime());
    img.onload = function () {
        alert("image is loaded");
    }
    

в этом коде каждый раз, добавляя текущую метку времени в конец URL-адреса изображения, вы делаете его уникальным, и браузер снова загружает изображение

Если src уже установлен, то событие запускается в кэшированном случае, прежде чем вы даже получите привязку обработчика событий. Таким образом, вы должны вызвать событие на основе off .complete тоже.

код:

$("img").one("load", function() {
   //do stuff
}).each(function() {
   if(this.complete || /*for IE 10-*/ $(this).height() > 0)
     $(this).load();
});

Я встретил тот же вопрос сегодня. После попытки различных методов, я понимаю, что просто положить код калибровки внутри $(window).load(function() {}) вместо document.ready решил бы часть проблемы (если вы не ajaxing страницу).

Я обнаружил, что вы можете просто сделать это в Chrome:

  $('.onload-fadein').each(function (k, v) {
    v.onload = function () {
        $(this).animate({opacity: 1}, 2000);
    };
    v.src = v.src;
});

настройка .src сам по себе вызовет событие onload.

Comments

    Ничего не найдено.