svgで「まずこれをやって、その次これをやって...」と順番にアニメーションするコードの書き方です。
svg画像はこちら。
コードはこんな感じです。
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="200"> <rect x="10" y="160" width="30" height="30" stroke="#000000" fill="#ff0000"> <animateTransform id="ani1" attributeName="transform" type="translate" values="0,0; 0,-150; 0,0" begin="0s;ani2.end" dur="4s" /> </rect> <circle cx="75" cy="175" r="15" stroke="#000000" fill="#0000ff"> <animateTransform id="ani2" attributeName="transform" type="translate" values="0,0; 0,-150; 0,0" begin="ani1.end" dur="4s" /> </circle> </svg>
まず、animateTransformなどのアニメーション用タグにidを振っておきます。 このidをアニメーション用タグのbegin属性に書けば、複数のアニメーションを連携させることができます。 rectやcircleなどのオブジェクトのidを指定するのではないので注意。
このサンプルはrectとcircleを移動させているだけなので使っているタグはanimateTransformです。 rectのアニメーションは「id="ani1"」、circleのアニメーションは「id="ani2"」にしました。 ani1が終わったタイミングでani2を動かしたいとき、ani2のbegin属性に「ani1.end」を書いておけば順番にアニメーションさせることができます。
begin属性にはセミコロン;で区切って複数の開始時間を登録することができます。 ani1のbegin属性には、
- 開始直後に動かしたいので、0s
- 交互に動かしたいので、ani2.end
の2つの開始時間が登録されています。
このサンプルでは順番に動かすための「id.end」しか使っていません。 この他にも「id.begin」と書いて他のアニメーションが始まるときに一緒に動かすこともできます。
投稿タイトルから離れますが、begin属性には click、mouseoverなどのイベントも指定することができます。
svgイベントでのアニメーションの開始はjavascriptとは無関係です。 複雑なことはできませんが、ユーザーがブラウザのjavascriptを切っていても動作させることができます。