Я хочу создать окно предупреждения после загрузки изображения, но если изображение сохраняется в кеше браузера, .onload
событие не запускается.
Как мне вызвать предупреждение, когда изображение было загружено, независимо от того, было ли оно кэшировано или нет?
var img = new Image();
img.src = "img.jpg";
img.onload = function () {
alert("image is loaded");
}
javascript
image-loading
Ото Шавадзе
источник
источник
Ответы:
Поскольку вы создаете изображение динамически, установите
onload
свойство передsrc
.Fiddle - протестирован на последних выпусках Firefox и Chrome.
Вы также можете использовать ответ в этом посте , который я адаптировал для одного динамически сгенерированного изображения:
Скрипка
источник
.src
перед установкой .onload? У вас все было правильно в первом примере кода, а во втором - нет. Второй не будет работать должным образом в некоторых версиях IE.=]
Он использует.complete
проверку на случай, если изображение уже было кэшировано, следовательно, код демонстрирует это. Конечно, для лучшей практики вы всегда можете установитьsrc
привязку после всех обработчиков..complete
. Просто настройте обработчик нагрузки перед настройкой,.src
и это НИКОГДА не понадобится. Я написал слайд-шоу, которое используют тысячи сайтов во всех мыслимых браузерах, и первый метод работает каждый раз. Нет необходимости когда-либо проверять.complete
создание нового изображения с нуля, как это.=]
. Также @ jfriend00 не могли бы вы проверить, загружается ли изображение в IE? Интересно, проблема ли это в моей сети или в IE и образе.img.src = ''
перед назначением нового src, если он использовался раньше.Если src уже установлен, событие запускается в кешированном случае еще до того, как вы получите привязку обработчика события. Итак, вы также должны запускать событие на основе
.complete
.пример кода:
источник
В таких ситуациях есть два возможных решения:
Добавьте уникальный суффикс к изображению,
src
чтобы браузер снова загрузил его, например:В этом коде каждый раз, добавляя текущую временную метку в конец URL-адреса изображения, вы делаете его уникальным, и браузер снова загружает изображение.
источник
.onload
обработчик перед установкой.src
значения, и вы не пропустите событие onload в некоторых версиях IE.Сегодня я столкнулся с той же проблемой. Попробовав различные методы, я понимаю, что просто поместите код изменения размера внутрь
$(window).load(function() {})
вместо того,document.ready
чтобы решить часть проблемы (если вы не используете jaxing страницу).источник
$(document).ready
чтобы$(window).load
решить мою проблему.Я обнаружил, что вы можете просто сделать это в Chrome:
Установка самого .src вызовет событие onload.
источник