2014-07-10 17 views
5

Voglio manipolare un'immagine SVG dopo che è stata caricata con snap.svg. Sfortunatamente il callback dell'evento load non viene mai chiamato. Come posso registrare un evento di caricamento sull'oggetto svg?Come ascoltare un evento di caricamento di un oggetto con un'immagine SVG?

Ho creato questo minimal example del mio problema.

HTML:

<object data="http://upload.wikimedia.org/wikipedia/en/8/80/Wikipedia-logo-v2.svg" type="image/svg+xml" id="animation" /> 

Javascript:

alert('loading'); 
$('#animation').on('load', function() { 
    alert('loaded'); 
}); 
+0

Da segnalare che è possibile caricare un file SVG con Snap utilizzando Snap.load che prende una richiamata, come http://stackoverflow.com/questions/20110422/load -svg-in-a-specifico-div-con-snap-svg/20153163 # 20153163 – Ian

+0

@lan: Cosa succede se l'utente ha disabilitato JavaScript? – Robin

+0

In tal caso, no, non caricherà il file, quindi se l'immagine è necessaria in quel modo, non sarebbe utile. – Ian

risposta

8

Da questo post jQuery SVG-object tag load event

Sembra jQuery impedisce semplicemente quello di associare un evento di "carico" ad un non elemento immagine-o-documento, quindi uso solo "ufficiale" addEventListener() funzione ...

Anche se non è ancora così, ma il problema era principalmente che in jsfiddle stavi eseguendo il codice sul documento "caricato" anziché sul documento "pronto". Il documento caricato significa che tutte le risorse sono state caricate prima di eseguire il codice in modo che l'immagine svg sia già stata caricata.

funziona bene con questo jsfiddle aggiornato http://jsfiddle.net/47jSh/2/

alert('loading'); 
$('#animation')[0].addEventListener('load', function() { 
    alert("loaded");  
}, true); 
Problemi correlati