2014-07-10 14 views
5

Chcę manipulować obrazem SVG po załadowaniu snap.svg. Niestety wywołanie zwrotne zdarzenia load nigdy nie jest wywoływane. Jak mogę zarejestrować zdarzenie load do obiektu svg?Jak można odsłuchać zdarzenie ładowania obiektu z obrazem SVG?

Utworzyłem ten minimal example mojego problemu.

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

Warto zauważyć, że można załadować SVG z Snap użyciu Snap.load która przyjmuje zwrotnego, jak http://stackoverflow.com/questions/20110422/load -svg-into-a-specific-div-with-snap-svg/20153163 # 20153163 – Ian

+0

@lan: Co się stanie, jeśli użytkownik wyłączy JavaScript? – Robin

+0

W takim przypadku nie załaduje pliku, więc jeśli obraz jest potrzebny, to nie będzie użyteczny. – Ian

Odpowiedz

8

Od tego postu jQuery SVG-object tag load event

Wydaje się jQuery po prostu uniemożliwia powiązać zdarzenie "ładunek" do nie- element image-or-document, więc używam tylko "oficjalnego" addEventListener() funkcja ...

Nie wiadomo też, czy tak jest nadal, ale problem polegał głównie na tym, że w jsfiddle kod był wykonywany na dokumencie "załadowany" zamiast dokumentu "gotowy". Załadowany dokument oznacza, że ​​wszystkie zasoby są ładowane przed wykonaniem kodu, aby obraz svg był już załadowany.

Działa dobrze z tym zaktualizowanym jsfiddle http://jsfiddle.net/47jSh/2/

alert('loading'); 
$('#animation')[0].addEventListener('load', function() { 
    alert("loaded");  
}, true); 
Powiązane problemy