2012-07-09 17 views

Respuesta

12

Sí, es posible.

En marcado:

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

Ver jsfiddle.

En la escritura:

<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> 

Ver jsfiddle.

+0

No puedo hacer que esto funcione, ni con marcado ni script; ¿eres capaz de dar un ejemplo? – Richard

+0

http://www.w3.org/TR/SVG/interact.html#SVGEvents, ¿ha probado el atributo externalResourcesRequired al que se hace referencia, como se menciona en el enlace? – neo

+0

@neo: el atributo externalRequirementsRequired no es necesario aquí. –

6

He encontrado que esto no funcionaría para SVG objeto creado usando D3, pero la respuesta aquí funcionaba muy bien:

How can I display a placeholder image in my SVG until the real image is loaded?

Por ejemplo esto funcionó:

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

pero esto no trabajo:

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

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

Pero el nombre del atributo es como HTML: 'onload'. Pero el nombre del evento es diferente: 'SVGLoad' no' load'. Ver http://www.w3.org/TR/SVG/interact.html#LoadEvent – mems

Cuestiones relacionadas