2017-10-19 17 views
1

インラインSVGの<image>がロードされているかどうかを確認する方法はありますか?通常のimgは、<img>がロードされているかどうかを確認する完全なプロパティを持っていますが、<image>ではありません。イメージがまだロードされていない場合にのみ、ロードイベントリスナーを追加します。次のインラインSVGイメージがロードされているかどうかをチェック

Here's a codepen

<svg width="300" height="300"> 
    <image xlink:href="http://placebeard.it/300/300" width="300" height="300"></image> 
</svg> 


<script> 
    var image = document.querySelector('image'); 
    console.log(image.complete) // undefined 
    if (!image.complete && image.complete != null){ // does not work because there is no complete property of svg image, unlike a regular img 
    image.addEventListener('load', function(){ 
     alert('image loaded'); 
    }); 
    } 
</script> 
+0

? –

+0

修正しました、ありがとうございます。 – Dan0

+0

私はこの質問の将来の読者を混乱させることを避けるためにコードサンプルを壊れた状態に戻しました。 –

答えて

0

あなたはまだ、ロードイベントを追加することができます。すでに読み込まれているかどうかを知るためのプロパティはありません。 HREFを:

var image = document.querySelector('image'); 
 
image.addEventListener('load', function(){ 
 
    alert('image loaded'); 
 
});
<svg width="300" height="300"> 
 
    <image xlink:href="http://placebeard.it/300/300" width="300" height="300"></image> 
 
</svg>

+0

もちろん、ロードイベントリスナーが追加される前にイメージがロードされている場合、イメージは決して起動しません。 – Dan0

0

私のソリューションは、データの属性に映像ソースを入れて、その後のxlinkに入れ替えるloadイベントリスナーを追加することです。 ChromeとFirefoxで動作します。それはいけない "(​​!image.complete)場合は、" あるべき

Codepen

<svg width="300" height="300"> 
    <image xlink:href="http://placebeard.it/300/300" width="300" height="300"></image> 
</svg> 

<script> 
    var image = document.querySelector('image'); 
    image.addEventListener('load', function(){ 
    alert('image loaded'); 
    }); 

    image.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', 
    image.dataset.src); 
</script> 
関連する問題