Проверьте, загружено ли изображение в jQuery (или обычный JavaScript)

Я знаю, что в jQuery есть событие load(), которое запускается, когда изображение завершает загрузку. Но что, если обработчик событий прикреплен после загрузки изображения?

Есть ли такое свойство, как $('#myimage').isLoaded(), чтобы проверить, загружено ли уже изображение?


person laurent    schedule 07.07.2012    source источник
comment
я думаю, это именно то, что вам нужно: http://stackoverflow.com/a/1257418/235710   -  person Mohammad Adil    schedule 07.07.2012


Ответы (3)


Вы можете проверить свойство изображения complete.

Есть ли такое свойство, как $('#myimage').isLoaded(), чтобы проверить, загружено ли уже изображение?

Нет, но ты мог бы это сделать :)

jQuery.fn.isLoaded = function() {
    return this
             .filter("img")
             .filter(function() { return this.complete; }).length > 0;
};

Это приведет к true, если все изображения в коллекции были загружены, и false, если одно или несколько изображений не были загружены. Вы можете адаптировать его под свои нужды.

person alex    schedule 07.07.2012
comment
'.complete' на самом деле довольно широко поддерживается. Он был стандартизирован в HTML5, но поддерживался задолго до этого (даже IE6, я думаю). - person jfriend00; 07.07.2012

Достаточно простого JS. Объект изображения имеет полное свойство. Проверьте это здесь: http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_img_complete

person sleepwalker    schedule 07.07.2012

Это немного взломано, и я не уверен, что он будет работать везде. Сделайте тест самостоятельно.

$.fn.isLoaded = function(message) {
  var $this = $(this);
  if($this.height() > 0 && $this.width() > 0){
     return true;
  }
  return false;
};

$('#myimage').isLoaded()

РЕДАКТИРОВАТЬ:

Это работает в ff и chrome,

$.fn.isLoaded = function(message) {
  var $this = $(this); 
  $this.hide();   // becaues firefox gives a 24*24 dimension
  var w = this[0].width;
  var h = this[0].height;  
  $this.show(); 
  if(w > 0 || h > 0){ 
    return true;
  } 
  return false;
}; 
console.log($('#myimage').isLoaded());

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

Я надеюсь, что кто-то сможет объединить обе эти функции, чтобы сделать кроссбраузерную вещь, или, по крайней мере, это наверняка кому-то поможет.

person Jashwant    schedule 07.07.2012
comment
Это будет работать только для изображений, которые находятся на странице и отображаются. Вместо этого используйте this[0].height и this[0].width (которые устанавливаются в соответствии с размерами изображения, если изображение загружено) - person Esailija; 07.07.2012
comment
странно, но в firefox он дает размер 24x24. Прекрасно работает в хроме. Я предполагаю, что 24 * 24 - это размер изображения, который отображается, когда изображение не найдено. - person Jashwant; 07.07.2012
comment
Правда, оба эти решения довольно паршивые - person Esailija; 07.07.2012