Я использую JavaScript с библиотекой jQuery для управления миниатюрами изображений, содержащимися в неупорядоченном списке. Когда изображение загружается, оно делает одно, а при возникновении ошибки - другое. Я использую jQuery load()
и error()
методы в качестве событий. После этих событий я проверяю DOM-элемент image на наличие .complete, чтобы убедиться, что изображение еще не загружено, прежде чем jQuery сможет зарегистрировать события.
Он работает правильно, за исключением случаев, когда возникает ошибка, прежде чем jQuery сможет зарегистрировать события. Единственное решение, которое я могу придумать, - это использовать onerror
атрибут img для хранения «флага» где-то на глобальном уровне (или на самом узле), который говорит, что произошел сбой, поэтому jQuery может проверить этот «store / node» при проверке .complete.
У кого-нибудь есть лучшее решение?
Редактировать: Основные точки выделены жирным шрифтом и добавлены дополнительные подробности ниже: Я проверяю, завершено ли изображение (оно также загружено) ПОСЛЕ того, как я добавляю на изображение событие загрузки и ошибки. Таким образом, если изображение было загружено до регистрации событий, я все равно буду знать. Если изображение не загружается после событий, события позаботятся об этом, когда это произойдет. Проблема в том, что я могу легко проверить, загружено ли изображение, но не могу сказать, произошла ли ошибка.
источник
Ответы:
Другим вариантом является запуск событий
onload
и / илиonerror
событий путем создания элемента изображения в памяти и установки егоsrc
атрибута в качестве исходногоsrc
атрибута исходного изображения. Вот пример того, что я имею в виду:Надеюсь это поможет!
источник
.attr
строку после.load
и.error
линий. В противном случае вы рискуете загрузить изображение (или столкнуться с ошибкой) до того, как эти обратные вызовы будут добавлены, и они не будут вызваны..load()
и.error()
методы запутанные и теперь осуждаются, использование.on()
и использоватьload
иerror
как события.Проверьте
complete
иnaturalWidth
свойства, в этом порядке.https://stereochro.me/ideas/detecting-broken-images-js
источник
Основываясь на моем понимании в HTML спецификации W3C для
img
элемента , вы должны быть в состоянии сделать это , используя комбинациюcomplete
иnaturalHeight
атрибутов, например , так:Из спецификации для
complete
атрибута:По сути,
complete
возвращает true, если изображение либо завершило загрузку, либо не удалось загрузить. Поскольку нам нужен только тот случай, когда изображение успешно загружено, нам нужно также проверитьnauturalHeight
атрибут:И
available
определяется так:Поэтому, если изображение «повреждено» (не удалось загрузить), оно будет в поврежденном состоянии, а не в доступном состоянии, поэтому
naturalHeight
будет 0.Поэтому проверка
imgElement.complete && imgElement.naturalHeight !== 0
должна сообщить нам, успешно ли загружено изображение.Подробнее об этом можно прочитать в HTML-спецификации W3C для
img
элемента или в MDN .источник
Я пробовал много разных способов, и этот способ - единственный, который работал для меня
Вы также можете добавить функцию обратного вызова, сработавшую, когда все изображения загружены в DOM и готовы. Это относится и к динамически добавляемым изображениям. http://jsfiddle.net/kalmarsh80/nrAPk/
источник
Используйте
imagesLoaded
библиотеку JavaScript .Используется с простым Javascript и как плагин jQuery.
Особенности:
Ресурсы
источник
complete
свойство явно не поддерживается: невозможно найти надежный источник информации о поддержке браузера.complete
Свойство также, похоже, не имеет четкой спецификации: спецификация HTML5 - единственная, упоминающая об этом, и она все еще находится в черновой версии на момент написания. Если вы используетеnaturalWidth
иnaturalHeight
поддерживаете только IE9 +, поэтому, если вы используете его, чтобы узнать, загружено ли изображение, вам понадобится какой-нибудь «умный» трюк, чтобы заставить его работать в старых браузерах, и вы должны проверить, что кросс-браузерное поведение согласованноПолучить информацию из элементов изображения на странице.
Тестирование работы в Chrome и Firefox.
Работа с jsFiddle (откройте консоль, чтобы увидеть результат)
Примечание: я использовал jQuery , я думал, что это может быть достигнуто на полном JavaScript
Я нахожу хорошую информацию здесь OpenClassRoom -> это французский форум
источник
Детектор сети в реальном времени - проверьте состояние сети, не обновляя страницу: (это не jquery, но протестировано и работает на 100%: (протестировано на Firefox v25.0))
Код:
если соединение потеряно, просто нажмите кнопку «Снова».
Обновление 1: автоопределение без обновления страницы:
источник
Прочитав интересные решения на этой странице, я создал простое в использовании решение, на которое сильно повлияли заметки SLaks и Noyo, которые, кажется, работают над довольно свежими (на момент написания) версиями Chrome, IE, Firefox, Safari и Опера (все на Windows). Кроме того, он работал на эмуляторе iPhone / iPad, который я использовал.
Одно из основных различий между этим решением и SLaks и публикацией Noyo заключается в том, что это решение в основном проверяет свойства naturalWidth и naturalHeight. Я обнаружил, что в текущих версиях браузера эти два свойства обеспечивают наиболее полезные и согласованные результаты.
Этот код возвращает TRUE, когда изображение полностью загружено и успешно. Он возвращает FALSE, когда изображение либо не загружено полностью, либо ИЛИ не удалось загрузить.
Одна вещь, о которой вам нужно знать, это то, что эта функция также возвращает FALSE, если изображение является пиксельным изображением 0x0. Но эти изображения довольно необычны, и я не могу вспомнить очень полезного случая, когда вы хотели бы проверить, загрузилось ли уже изображение с пикселем 0x0 :)
Сначала мы прикрепляем новую функцию isLoaded к прототипу HTMLImageElement, чтобы эту функцию можно было использовать с любым элементом изображения.
Затем, в любое время, когда нам нужно проверить состояние загрузки изображения, мы просто вызываем функцию isLoaded.
Согласно комментариям Джорджа о записи SLaks и Noyo, это решение, вероятно, можно использовать в качестве одноразовой проверки в Safari Mobile, если вы планируете изменить атрибут SRC. Но вы можете обойти это, создав элемент изображения с новым атрибутом SRC вместо изменения атрибута SRC в существующем элементе изображения.
источник
Вот как я заставил его работать в кросс-браузерном режиме, используя комбинацию описанных выше методов (мне также нужно было динамически вставлять изображения в DOM):
Примечание. Вам нужно будет указать допустимое логическое состояние для переменной isIE.
источник
// Или как плагин
источник
Как я понимаю, свойство .complete нестандартно. Это не может быть универсальным ... Я замечаю, что в Firefox, IE, кажется, он работает по-другому. Я загружаю несколько изображений в JavaScript, а затем проверяю, завершено ли. В Firefox это работает отлично. В IE это не так, потому что изображения загружаются в другой поток. Это работает, только если я помещаю задержку между моим назначением для image.src и когда я проверяю свойство image.complete.
Использование image.onload и image.onerror также не работает для меня, потому что мне нужно передать параметр, чтобы знать, о каком изображении я говорю, когда вызывается функция. Кажется, что любой способ сделать это потерпел неудачу, потому что фактически он передает одну и ту же функцию, а не разные экземпляры одной и той же функции. Таким образом, значение, которое я передаю, чтобы идентифицировать изображение, всегда оказывается последним значением в цикле. Я не могу придумать способ обойти эту проблему.
В Safari и Chrome я вижу true для image.complete и значение NaturalWidth, даже когда консоль ошибок отображает 404 для этого изображения ... и я намеренно удалил это изображение, чтобы проверить это. Но вышесказанное хорошо работает для Firefox и IE.
источник
Этот фрагмент кода помог мне исправить проблемы с кэшированием в браузере:
Когда кеш браузера отключен, только этот код не работает:
чтобы это работало, нужно добавить:
источник
Используя этот
JavaScript
код, вы можете проверить, успешно ли загружено изображение.Попробуйте это
источник
У меня было много проблем с полной загрузкой изображения и EventListener.
Что бы я ни пытался, результаты не были надежными.
Но потом я нашел решение. Технически это не очень хорошо, но теперь у меня никогда не было неудачной загрузки изображения.
Что я сделал:
Вместо того, чтобы загружать изображение один раз, я просто загружаю его второй раз сразу после первого раза, и оба запускаются через обработчик событий.
Все мои головные боли ушли!
Кстати, вы, ребята из stackoverflow, помогали мне уже более ста раз. За это очень большое спасибо!
источник
Этот работал хорошо для меня :)
источник