В принятом ответе много говорится о проблеме, при которой событие onload
не срабатывает, если изображение загружается из кэша WebKit.
В моем случае onload
запускается для кэшированных изображений, но высота и ширина все еще равны 0. Простой setTimeout
решил проблему для меня:
$("img").one("load", function(){
var img = this;
setTimeout(function(){
// do something based on img.width and/or img.height
}, 0);
});
Я не могу сказать, почему событие onload
запускается, даже когда изображение загружается из кэша (улучшение jQuery 1.4 / 1.5?) - но если вы все еще испытываете эту проблему, возможно, комбинация мой ответ и техника var src = img.src; img.src = ""; img.src = src;
будут работать.
(Обратите внимание, что для моих целей меня не интересуют заранее определенные измерения, как в атрибутах изображения, так и в стилях CSS - но вы можете удалить их, как указано в ответе Хави. Или клонировать изображение.)