是否可以在SVG中监听图像加载事件?

Rus*_*tam 14 javascript svg load image

是否可以<image>在SVG中侦听加载事件?如果是的话,怎么做?

Eri*_*röm 14

是的,这是可能的.

在标记中:

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

jsfiddle.

在脚本中:

<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>
Run Code Online (Sandbox Code Playgroud)

jsfiddle.

  • firefox 似乎根本不会为 &lt;image&gt; 元素触发加载事件。但是,所有其他浏览器都可以,请参阅此测试用例 http://xn--dahlstrm-t4a.net/svg/events/load-events/image-root.svg。 (2认同)

zay*_*uan 7

我发现这对使用D3创建的SVG对象不起作用,但这里的答案很有用:

如何在加载实际图像之前在SVG中显示占位符图像?

例如,这工作:

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

但这不起作用:

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

img.addEventListener('load', function() { console.log('loaded'); });
Run Code Online (Sandbox Code Playgroud)