Android アプリの Web ビューを開発するのと同じ問題があります。ロードイベント (ウィンドウとイメージ要素の両方) とイメージ要素の完全な状態が発生するのが早すぎます。私の(svg)画像はまだ描画が終わっていないため、サイズの計算がうまくいきません。
私が見つけた唯一の回避策は、非常に短いタイマー (1 ミリ秒または 10 ミリ秒) です。考慮すべきそのようなイメージが1つしかないので、それは私にとってはうまくいきます。そして、画像データが既に読み込まれているときにこのタイマーを開始するので、この短い経過時間は、デバイスが画像を描画するのに十分な時間である必要があります。
window.addEventListener('load', function() {
var img = document.getElementById('logo');
window.setTimeout(function(){
var imgRatio = img.naturalWidth / img.naturalHeight;
var renderedWidth = parseInt(window.getComputedStyle(img).width.match(/(\d+)px/));
console.log(renderedWidth, img.complete);
if (renderedWidth < img.naturalWidth) {
img.style.height = (renderedWidth / imgRatio) + 'px';
}
}, 1);
}
ウィンドウの読み込みイベントの代わりに、画像の読み込みイベントも機能するはずです。しかし、他の要素が私のイメージの描画に影響を与える可能性があるため、すべてを待つ方が安全であることがわかりました.