SVGアニメーションの再生タイミングについて

今回は前回書きました『IllustratorからSVGを書き出して、SVGアニメーションを追加する』の関連記事です。SVGアニメーションの再生タイミングにかなりハマったのでもう少し詳しくご紹介したいと思います。OPERAさんの2006年(!)の記事に、詳しい解説がありましたので、参考にしています。こうして見てみると、枯れた技術かと思われていたSVGに再び光が当たった感がありますね。 

animate要素の追加

 例えば、以下のようなanimate要素を追加したい場合。

<animate attributeName=”opacity” begin=”indefinite” to=”0″ dur=”0.25″ fill=”freeze” />

動的に追加すると以下のようになります。

function fade (target) {
   
   // animation要素の生成
   var animation = document.createElementNS(‘http://www.w3.org/2000/svg’, ‘animate’);
   
   // 属性の追加
   animation.setAttributeNS(null, ‘attributeName’, ‘fill-opacity’);
   animation.setAttributeNS(null, ‘begin’, ‘indefinite’);
   animation.setAttributeNS(null, ‘to’, 0);
   animation.setAttributeNS(null, ‘dur’, 0.25);
   animation.setAttributeNS(null, ‘fill’, ‘freeze’);
  
   // Animation要素をSVGに追加
   target.appendChild(animation);
   
   // アニメーション開始
   animation.beginElement();
}

アニメーション開始のタイミング

ここで注意しなければならないのがbegin属性の値です。begin属性を省略すると、アニメーションを開始するオフセット時間(何秒からアニメーションが始まるか)が0秒であることを意味します。0秒とは、文書が読み込まれたタイミングを意味します。このbegin属性に”indefinite”を指定すると、SMIL DOMからメソッドを使用できることを意味し、beginElement()を呼ぶことでJavaScriptからアニメーションを開始させることができます。
 
しかし、beginElementしてもSVG要素の状態によってはアニメーションが動かないことがあります。SVGのアニメーションはページのloadイベントで開始されるらしく、読み込みの段階でrootにくっついていない場合、後からSVGを追加してもアニメーションしませんでした。そこで、displayプロパティで非表示にし、対応しました。
 
今のところ、IEではSMILアニメーションの実装予定は無いようです(CSS3の機能と重複があるため)ので、クロスブラウザ対応を見据える場合は、CSSアニメーションもしくはJSでの属性変更が無難かもしれません。

Related Post

Parse.comを使ったサーバサイド実装不要のフロントエンド開発[前編]Parse.comを使ったサーバサイド実装不要のフロントエンド開発[前編]

ParseはBaaS(Backend as a Service)と呼ばれる、アプリに共通して必要となるバックエンドの機能を提供するクラウドサービスのひとつです。BaaSを利用することで、データの同期やユーザ管理、プッシュ配信、ソーシャル連携など、アプリごとに独自の開発を行うことなく効率よく開発を進めることができます。  Parseでは、iOS、Android、JavaScript、.NET、OS Xと様々なプラットフォーム向けのSDKが提供されています。今回はこのParseのJavaScript SDKを使ってみます。 新規アプリケーションの作成

Sass/Compassを使ってCSSスプライトに挑戦してみました。Sass/Compassを使ってCSSスプライトに挑戦してみました。

CSSスプライトを作成する機会があったため、最近よく耳にするSassとCompassを使ってみました。CSSスプライトとは、複数の画像を1枚の画像としてまとめ、CSSで表示範囲を指定することにより表示する手法です。画像のリクエスト数を削減することができるため、高速化の手法の1つとして利用されています。 Sass/Compassについて  Sassとは、CSSの拡張メタ言語です。独自の文法で記述したファイルをコンパイルして、CSSを生成します。独自の文法といっても、CSSをそのまま書くこともできますし、CSSをベースに拡張されているので学習コストは低いです。変数や演算、ミックスインと呼ばれる関数のような仕組みや継承、条件式などの文法があり、CSSの冗長性や保守性、生産性の悪さを解消することができます。公式サイトは英語ですが、enja-ossというプロジェクトでリファレンスの日本語訳が進められているようです。 次にCompassとは、sassのフレームワークで、様々なミックスインやスタイルが用意されています。CSSスプライトをはじめ、ベンダープレフィックスを自動で追加してくれたり、sassファイルの変更を監視して自動でコンパイルしたりと便利な機能が満載です。今回は、このCompassのCSSスプライトの機能を使ってみます。Sass/Compassのインストール、設定ファイルの記述については割愛します。 CompassでCSSスプライト  CSSスプライトを生成するためには、まずSass管理下の画像ディレクトリ内に任意のディレクトリを作成し、スプライトの元となる画像を用意します。今回は以下のような構成で画像を用意しました。 続いて、.scssファイルを用意します。最低限書かなければいけないのは、以下の4行です。この4行で、指定したフォルダ内の画像をCSSスプライト画像にまとめ、表示用クラスを生成することができます。  @charset “utf-8”; @import

Gruntで快適な環境を整備したい!【インストール編】Gruntで快適な環境を整備したい!【インストール編】

みなさんはHTML/JS/CSSベースの開発をする際、どんな開発環境で開発していますか?今回は快適な開発環境を目指して、Gruntというタスクの自動化ツールを使ってみます。使用するGruntのバージョンは0.4.1です。 Gruntとは…? Gruntとは、ファイルのコピーや削除、JS/CSSのminifyなどの作業を自動化してくれるビルドツールです。Node.jsベースで動作しており、コマンドラインで使用します。ファイルのコピーや削除は人の手が入るほどミスが発生しがちです。また、JS/CSSのminifyはオンラインで行えるものもありますが、修正の度にすべてのファイルに手動で実行するのは大変手間がかかります。このような単純作業を自動化して、効率化を図ることができるのがGruntです。 Gruntのインストール Gruntの動作には、Node.jsと、Gruntのコマンドラインインターフェースであるgrunt-cliが必要です。まず、この2つをインストールします。  ■Node.jsのインストール Node.jsはインストーラを使ってインストールします。Node.js公式サイトのトップページにINSTALLボタンがあるので、ここからインストーラをダウンロードしてください。画面の指示に従って進めて行けば、インストール完了です。コマンドプロンプトで「node -v」と入力し、バージョンが表示されればインストール成功です。