IllustratorからSVGを書き出して、SVGアニメーションを追加する

iOS5のアップデートに伴い、Mobile SafariがインラインSVGに対応しました。そこで、このiOS5のMobileSafari向けに、キャラクターのイラストをIllustratorで書き出し、SMILアニメーションに挑戦してみました。
  

SVGをアニメーションさせる際の選択肢

SVGで書き出したグラフィックをアニメーションさせる場合、DOM操作、SMILアニメーションなどいくつかの方法があります。

・SMILアニメーション
・CSS3アニメーション
・JavaScriptでの属性値変更
・Canvasアニメーション

SVGの仕様は非常に大きく、アニメーション機能としてSMIL Animationをサポートしています。SMILとは、Synchronized Multimedia Integration Languageの略です。<animate>のような要素を追加することで、SVGにアニメーションを付加することができます。

SVGのアニメーション機能の種類

SVGのアニメーション機能には

animate要素 : 対象となる要素の1属性の時間経過に伴うアニメーションを設定する
set要素 : 指定した継続時間だけ属性値を設定する
animateMotion要素 : モーションパスに合わせたアニメーションを行う
animateColor要素 : 色を変化させる
animateTransform要素 : トランスフォーム 属性のアニメーションを行う

などがあります。詳しい属性などはW3CのSVG仕様のアニメーションの項目を参照してください。
 

IllustratorでSVGを書き出す

IllustratorではSVGの書き出しに対応しています。以下の方法でSVGを作成、保存します。

1、パーツごとにレイヤーを作成し、レイヤー名をつけます。
2、ファイルメニュー>別名で保存 で、「ファイルの種類」にSVGを選択。

書き出されたSVGを見てみると、パーツの要素ごとにid属性が追加されています。このidを元に要素を取得してアニメーション要素を追加します。今回使ったイラストとSVGの中身はこちら。

SVGにアニメーションを動的に追加する

 1.書き出したSVGと、アニメーションの属性一覧をXHRで読み込む
今回はアニメーション属性を動的に追加したかったため、それぞれのパーツに関する属性をJSONで用意しました。JSONの読み込み完了後に、SVG各要素を読み込み、idに対応したアニメーションを追加します。

“moveLeftFoot” : {
      ”animateElmName” : “animateTransform”,
      ”attrubutes” : {
      ”attributeName” : “transform”,
      ”type” : “rotate”,
      ”values” : “0;2;0″,
      ”dur” : “1s”,
      ”repeatDur” : “indefinite”
}

2.アニメーションの追加
Animation要素を生成し、属性を追加、アニメーションを有効にし、SVGに追加します。主に使用したメソッドは以下のような感じです。

// ノードを取り込み
// resXML XHRのレスポンス
var svgroot = resXML.documentElement;
var svgObj = document.adoptNode(svgroot);
 
// アニメーションを追加したいSVGの要素
var leftHand = svgObj.getElementById(‘leftHand’);
 
// animation要素の生成
var animation = document.createElementNS(‘http://www.w3.org/2000/svg’, ‘animateTransform’);
 
// 属性の追加
// setAttributeNS(namespace, name, value);
animation.setAttributeNS(null, ‘dur’, ‘1s’);
 
// アニメーション開始
animation.beginElement();
 
// Animation要素をSVGに追加
leftHand.appendChild(animation);

 全てのパーツにアニメーションを追加し終わったら、SVGオブジェクトをrootに追加します。各パーツのアニメーションの調整を考えると、Adobe Edgeなどのアニメーション生成ツールを使用する必要がありそうです。ツールとソースを効率よく使い分けられるようになりたいものです。

Related Post

縦書きにWebフォントを使いたい!けど使えるのか検証してみた縦書きにWebフォントを使いたい!けど使えるのか検証してみた

最近、IT系の記事や勉強会でWebフォントの話題を見かけるようになってきました。以前の記事では、Webフォントサービスのデコもじを使ってRIAXDNPブログの記事タイトルのフォントを変えてみましたが、今回は縦書きにした文字にWebフォントを適用できるのか検証してみました。検証環境はWindows版Safari(5.1.2)とMac版Safari(5.1.1)です。 WEBフォントを使う Webフォントサービスを使わずに自分でフォントを定義する場合、フォントのライセンスに注意してください。今回のフォントデータはデモ用に弊社の秀英体開発室からお借りしました。CSS3では以下のように@font-face規則を使って、フォントを定義することができます。 @font-face {font-family:’DNPShueiMinPr5B’;      src:url(‘../../fonts/DNPShueiMinPr5-B.otf’) format(‘opentype’);} .myFontStyle {      font-family:’DNPShueiMinPr5B’;}

フォントの機能を使えるCSS3のFont feature settingsとはフォントの機能を使えるCSS3のFont feature settingsとは

CSS3でWebフォント機能が追加され、異なるデバイス上でも同じフォントの表示が可能になったことをご存じの方も多いと思います。CSS3のフォントに関する仕様ではその他にも様々な機能が追加されており、そのひとつが今回ご紹介するfont-feature-settingsプロパティです。 Webフォントで利用できるフォントフォーマットにはTTF(True Type Font)、OTF(Open Type Font)、EOT(Embedded OpenType)、SVG Font(Scalable

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」と入力し、バージョンが表示されればインストール成功です。