Подтвердить что ты не робот

Возможно ли прослушивать событие загрузки изображения в SVG?

Возможно ли прослушивание события загрузки <image> в SVG? Если да, как это сделать?

4b9b3361

Ответ 1

Да, возможно.

В разметке:

<image xlink:href="example.png" width="10" height="10" 
       onload="alert('loaded')"/>

См. jsfiddle.

В script:

<script>
  var img = document.createElementNS("http://www.w3.org/2000/svg", "image");
  img.addEventListener('load', function() { alert('loaded'); });
  // or alternatively:
  // img.onload = function() { alert('loaded'); }
  img.width.baseVal.value = 100;
  img.height.baseVal.value = 100;
  img.href.baseVal = "example.png";
</script>

См. jsfiddle.

Ответ 2

Я обнаружил, что это не сработает для SVG-объекта, созданного с помощью D3, но ответ здесь отлично справился:

Как я могу отображать изображение-заполнитель в SVG до загрузки реального изображения?

Например, это сработало:

var img = innerG.append("image")
    .attr('onload', function() {
        console.log('loaded');
    })
    .attr("xlink:href", src)
    .attr("width", size)
    .attr("height", size);

Но это не сработало:

var img = innerG.append("image")
    .attr("xlink:href", src)
    .attr("width", size)
    .attr("height", size);

img.addEventListener('load', function() { console.log('loaded'); });