2017-10-27 1 views
0

Ich behalte einen Text (Klicken zum Wiederholen) unter dem SVG-Begrenzungsbereich, bis eine Animation endet. Ich benutze dann animateTransform, um den Text in die Mitte des Bildschirms zu bewegen. Wenn der Benutzer klickt, verwende ich eine andere animateTransform, um den Text unter den Bildschirm zu verschieben, bis die Animation endet. Unten sind die zwei animateTransforms. Beachten Sie, dass die Anfangs- und Endwerte von clickAniHide beide 0,0 sind, aber dies verschiebt den Text korrekt vom Bildschirm! Wenn ich diese animateTransform entferne, bewegt sich der Text nicht. Das Textobjekt befindet sich im Defs-Tag und wird von einem Tag referenziert. Das Textobjekt befindet sich nicht in einem Container, der es verschieben könnte.animateTransform verschiebt ein Objekt, obwohl die Anfangs- und Endwerte identisch sind

Der Einfachheit halber poste ich nur die relevanten animateTransforms, um zu starten, aber ich werde mehr/den gesamten Code bei Bedarf posten. Vielen Dank!

<animateTransform 
    id="clickAniShow" 
    xlink:href="#rerun" 
    attributeType="XML" 
    attributeName="transform" 
    type="translate" 
    calcmode="discrete" 
    dur="0.1s" 
    begin="boxani2.end+0.75s;" 
    keyTimes="0; 1" 
    values="0, 0; 0, -350;" 
    fill="freeze" 
    /> 

    <animateTransform 
    id="clickAniHide" 
    xlink:href="#rerun" 
    attributeType="XML" 
    attributeName="transform" 
    type="translate" 
    calcmode="discrete" 
    dur="0.1s" 
    begin="restarter.click+0.2s;" 
    keyTimes="0; 1" 
    values="0,0; 0,0;" 
    fill="freeze" 
    /> 
+0

BTW, diese (und andere) Animationen, die ich gemacht habe, laufen nur in Chrome. Ich erhalte nur ein statisches Bild in Firefox und Edge. SVG-Unterstützung scheint ziemlich spotty ... es sei denn, ich vermisse einige magische Beschwörungen. – darrellart

Antwort

0

Standardmäßig ersetzen die Werte in einer Animation alle vorherigen Werte, die das Attribut hatte.

  • Für Ihre erste Animation, bei 0s wird transform(0,0) gesetzt, und bei 0,1 s, transform(0,-350) gesetzt ist und bleibt nach der fill="freeze" Regel.
  • Für Ihre zweite Animation, 0s, transform(0,0) ist eingestellt, und bei 0.1s, transform(0,0) ist wieder eingestellt. Denken Sie daran, vor dieser Animation, aber nach dem ersten war es bei transform(0,-350).

Es gibt zwei zusätzliche rules Sie einstellen können:

  • additive="sum": Wenn Ihr Textelement zum Beispiel ein transform="scale(...)" Attribut, bevor irgendwelche Animation beginnt hätte, würde die Animation nicht diesen Wert, ersetzen, sondern die bereits übersetzen skaliertes Element
  • accumulate="sum": Wenn ein Element mehrere Animationen hat, beginnt eine Animation am Endzustand des vorherigen, genau wie Sie es hier erwartet haben.

Es sollte calcMode, nicht calcmode durch die Art und Weise sein.

In Bezug auf die Unterstützung von SMIL-Animationen unterstützen Edge und Internet Explorer keine SMIL-Animationen. Ab IE 10 können Sie stattdessen CSS animations verwenden. Ich kann nicht sofort erkennen, warum Sie ein Problem mit Firefox haben.

+0

Für Edge und IE-Unterstützung für SMIL verwenden [FakeSmile] (https://leunen.me/fakesmile/) –

+0

Vielen Dank für Ihre Hilfe! Ich denke du hast mir schon vorher geholfen (und wahrscheinlich auch wieder)! Wenn ich dieses Recht habe, war mein Problem, dass ich an die Werte als absolute Koordinaten dachte, wenn sie stattdessen Werte von * Transformationen * sind, in diesem Fall Translation. Also, wenn die zweite Animation den Text auf 0, 0; 0, 0, setzte es auf seine ursprüngliche Position unter dem Bildschirm zurück und "bewegte" es dann um 0, 0. – darrellart

Verwandte Themen