XML » SVG Presenter - Carto:net
XML » SVG Presenter - Carto:net
XML » SVG Presenter - Carto:net
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>XML</strong> <strong>»</strong> <strong>SVG</strong> PRESENTER | STRUKTURIERTE MULTIMEDIA-PRÄSENTATION IM WEB 182<br />
Der in [Listing 6.5.2.1.1] dargestellte <strong>SVG</strong>-Code würde beispielsweise die rx-Eigenschaft (also den Radius<br />
zur X-Achse)<br />
der übergeord<strong>net</strong>en Ellipse in einem Zeitrahmen von 6 Sekunden (Zeitversatz: 3 Sekunden)<br />
vom Startwert 48º zeitkontinuierlich dem Zielwert annähern.<br />
Weitaus komplizierter gerät dieser Sachverhalt jedoch, wenn verschiedene<br />
Attribute ein- und desselben Objekts<br />
parallel verändert werden müssen: So erfordert etwa die einfache „Vergrößerung“ eines Objektes wie<br />
etwa in [Abb.6.5.2.1.1] die zeitgleiche Manipulation gleich 4 verschiedener Eigenschaften des Elements: So<br />
muss sowohl die Breite und die Höhe des Objekts entsprechend des angegebenen Skalierungsfaktors geändert,<br />
wie auch das Objekt in x- und y-Richtung verschoben werden, damit es „zentriert“ bleibt und nicht<br />
einfach nach „rechts-unten“ skaliert wird:<br />
Abb. 6.5.2.1.1: „Zoom“-<br />
Funktion eines Bildsymbols<br />
bei gleichzeitiger<br />
Manipulation der x-,<br />
y-, height- und width-<br />
Attribute<br />
Da dies, wie bereits<br />
eingangs ausgeführt,<br />
nicht mehr im Rahmen<br />
der durch S VG<br />
bzw. S MIL direkt bereitgestellten<br />
Syntax<br />
möglich ist, setzt sich das daraufhin für den <strong>XML</strong> <strong>»</strong> <strong>SVG</strong> <strong>Presenter</strong> entwickelte Animations-Framework aus<br />
zwei maßgeblichen Objekten zusammen: Dem Animations-Objekt ( AniObject),<br />
welches sowohl das zu<br />
animierende Objekt wie auch die bereits erwähnten Animations-Eigenschaften (Animations-Dauer, zu verändernde<br />
Eigenschaft), wie auch einen Animations-Tracker ( AniTracker), der die parallele Animation<br />
mehrerer solcher AniObjects ermöglicht. Der ECMAScript-Sprachumfang stellt hierfür etwa die Befehle<br />
setTimeout und setInterval bereit, mit deren Hilfe nun der AniTracker innerhalb beliebiger Zeitabstände<br />
die entsprechend im Tracker<br />
befindlichen AnimationsObjekte entsprechend ihrem Zielwert annähert.<br />
Ist eine Anim ation demnach abgeschlossen, so wird das entsprechende AniObject aus der Tracker-<br />
Liste gelöscht – ist auch diese leer, so ruft sich der Tracker nicht mehr selbst auf (rekursives Abbruchskriterium)<br />
und stellt seine Aktivitäten ein (so genannter idle-Zustand). Die Skalierungsfunktion aus [Abb.<br />
6.5.2.1.1] lässt sich beispielsweise mithilfe dieser beiden Objekte nun relativ einfach realisieren:<br />
at = new AniTracker(); // Tracker initialisieren<br />
svgObject = evt.getTarget(); // Zu animierendes Objekt ermitteln<br />
...<br />
var newX = getVal(obj, "x") - (oldWidth * (factor-1)) / 2;<br />
var newY = getVal(obj, "y") - (oldHeight * (factor-1)) / 2;<br />
xAni = new AniObject(svgObject, "x", newX, duration);<br />
yAni = new AniObject(svgObject, "y", newY, duration);<br />
widthAni = new AniObject(svgObject, "width", oldWidth * factor, duration);<br />
heightAni = new AniObject(svgObject, "height", oldHeight * factor, duration);<br />
...<br />
at.add(new Array(xAni, yAni, widthAni, heightAni));<br />
if(at.isIdle()) at.track();<br />
Listing 6.5.2.1.2: Skalierungsfunktion mithilfe<br />
von AniObject und AniTracker.<br />
Neben der freilich eher als „Spielerei“ aufzufassenden „Zoom“-Funktion,<br />
die beispielsweise zur Vergrößerung<br />
von Icon-Dateien (im Prototyp momentan etwa eingangs verwendet) dienen könnte, kommt das A-<br />
nimations-Framework im Rahmen der eigentlichen Präsentation etwa bei den optischen „Fades“ (bei Aus-<br />
wahl eines Items wird<br />
die Schrift weiß und der teiltransparente, schwarze Verlaufsbalken langsam eingeblendet)<br />
der Item-Selektion zum Einsatz: