前回に引き続き、今回もSVGでアニメーションをもっと使ってみようということで、内容を振り返ってみたいと思います。

CSSを使ったアニメーションをさらに深める

前回はCSSanimationやkeyframesを使ってアニメーションはしましたが、SVGのアニメーションというよりは、CSSでただ動かしただけでしたので、SVGならではのアニメーションを作ってみました。

See the Pen Animate SVG with CSS vol.2 by kurokoroll (@kurokoro) on CodePen.

部分的に位置を変えたりカラーを変えたりするのは、JPEGやPNGなどの画像ではできないので、SVGならではですね。

Spirit(プライベートβ版)を使ってみる

Spiritというアプリがあるということで、プライベートβ版を入手した方のを使って少し触らせてもらいましたが、いまいち掴めず…。見たところタイムラインがあって、簡単にアニメーションができそうな雰囲気だったが、指定されたコードを読み込んだファイルをウェブブラウザ上(Chromeが必要?)で開き、エクステンションを追加しなければならないようです。申し込んでから少し時間がかかる?らしく、今は手元にないのでまた改めて触ってみようかななと思います。

Animate CC + Snap.svgを使ってみる

Snap.svgはSVGを制御できるJavaScriptのライブラリの1つですが、それをAdobe Animate CCと組み合わせると、より簡単にアニメーションができるらしいとのことで試してみました。

参考にしたサイト:拡張機能Snap.svg Animatorを使ってAnimate CCからSVGを書き出そう – ICS MEDIA

1. 必要なアドオンを追加する

まず、Animate CCにAdobeのアドオン「Snap.svg Animator」を追加します。アドオンが追加後に、Animate CCを起動すると、初期画面に「SnapSVGAnimator(Custom)」という項目が表示されます。

2. タイムラインでアニメーションをつくる

Flashを使っていた方は馴染みがあるかと思いますが、オブジェクトをシンボル化後、ポイントポイントにキーフレームを挿入し、トゥイーン(今回はクラシックトゥイーンを使いました)を使って動かしていきます。このあたりはAnimate CCの使い方なので、ざっくり流します。

レイヤーのbody(体)とshadow(影)は動かさないのでそのまま。head(頭)を動かしてみました。ここまでで、頭が左右に動く動きを作っています。

headのシンボルの中に、eyes(両目)というシンボルを作り、eyesにも動きをいれていきます。キーフレームが並んでいる箇所で、簡単に瞬き風に見せるように、表示非表示を設定しています。

3. パブリッシュする

動きができたら、パブリッシュをします。プロパティのパブリッシュより「パブリッシュ設定」を開きます。

OutPut Fileだけ書き出し先を指定して、その他はそのままの設定でパブリッシュしました。

次のようなファイル構成で出力されます。SVGのコードはjson形式で吐き出されて、HTMLファイルで読み込みをされています。このとき、index.htmlをChromeで開いても表示が確認できません。Chromeで確認するには、サーバー環境(ローカルサーバー可)でないと表示できないようです。今回はFireFoxで確認しました。

index.htmlのコードはこちら。

<!DOCTYPE html>
        <html>
        <head>
        <style>
        svg{
            background-color: #FFFFFF;
        }
        </style>
        </head>
        <body>
    <script src="./SnapSVGAnimator/js/vendor/snap.svg/snap.svg-min.js"></script>
    <script src="./SnapSVGAnimator/js/SnapSVGAnimator.min.js"></script>

    <script type="text/javascript">
        var jsonfile = "index.json",
            fps = 30,
            width = 200,
            height = 250,
            AJAX_req;

    AJAX_JSON_Req(jsonfile);

    function handle_AJAX_Complete() {
        if( AJAX_req.readyState == 4 && AJAX_req.status == 200 )
        {
            json = JSON.parse(AJAX_req.responseText);
            comp = new SVGAnim(
                           json,
                           width,
                           height,
                           fps
                           );
        }
    }

    function AJAX_JSON_Req( url )
    {
        AJAX_req = new XMLHttpRequest();
        AJAX_req.open("GET", url, true);
        AJAX_req.setRequestHeader("Content-type", "application/json");
        AJAX_req.onreadystatechange = handle_AJAX_Complete;
        AJAX_req.send();
    }

            </script>
        </body>
        </html>

4. 完成

書き出したファイルを、kurokorollのWebサイトに埋め込んで見ました。実際のページでは、PCのみで幅を1440px以上にすると現れるようになっています。(めんどくさくてすみません…)

余談

サイトに埋め込む時には位置を決めるのに一手間いりまして、Adobe Community「【Animate CC】SVG書き出し(snap.SVG)後のHTMLでの表示位置について 」より、サンプルコードを参考に、配置することができました。

ウェブフォントをSVGで使ってみる

SVG内でテキストを入れて、ウェブフォントを使ってみようということで、高橋としゆきさんのCodePenより次のコードを参考に検証してみました。

See the Pen SVG and Web Font Test by Toshiyuki TAKAHASHI (@gau) on CodePen.

SVGをHTMLファイルに直接インラインで埋め込むなら問題ないのですが、imgタグで外部読み込みをするとウェブフォントは効きませんでした。objectタグやsvgのuseを使うと表示されました。

<!-- ウェブフォント効かなかった -->
<img src="text.svg">


<!-- ウェブフォント効いた -->
<svg id="text1" data-name="text1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 535 120">
          <defs>
          </defs>
          <title>SVG Text Test -inline-</title>
          <text class="cls" transform="translate(0 75)">SVG Text Test</text>
</svg>

<object id="textSvg" data="text.svg" type="image/svg+xml"></object>
<svg><use xlink:href="#text1"/></svg>

まとめ

Animate CC + Snap.svgは使い勝手がよさそうでした。Snap.svg以外のライブラリでも、(例えばGSAP)もCDNを読み込んで使うことができるようです。作る物にもよるかと思いますが、自分の使いやすいものを見つけれるといいなと思いました!