svgアニメーション(2)— setIntervalを使ったアニメーション

Tips

【お詫び】
以前投稿した「svgアニメーション」の記事ですが、その後、internet explorer(ie)では最新バージョンであるie11でも、css transitionやanimationでのsvgの操作には対応していないということが判明し、記事を御覧頂いた皆様に不完全な内容の記事をご紹介してしまったことをここにお詫びいたします。
(※わたしもその後対応でえらい目にあいました。。。)
ということで第2段です。
svgの手書き風アニメーションについて書かせていただいた前回の投稿では、

  1. 手書き文字のアウトラインを作成する
  2. 手書き文字のストロークを作成する
  3. svgコードを出力して、ストロークにclipPathを適用する
  4. cssでアニメーションを実装する

という4ステップで、ということで書かせていただきましたが、
今回はその4ステップ目の「cssでアニメーションを実装する」を「jQueryでアニメーションを実装する」と書き換える形で
ご紹介したいと思います。
※svgでの画像の作成方法やclipPathの使い方などは前回の記事「svgアニメーション」をご覧ください。

jQueryを使ったアニメーションの原理

まず、jQueryとはjavascriptを簡単に扱うことができるようにする「ライブラリ」と呼ばれるファイルの代表みたいなものでして、ウェブ上に有益な情報もたくさんあるため、ここではjQueryの紹介やインストール方法については割愛させていただきます。
jQueryでアニメーションというと、jQueryを知っている方は、「jQueryにはanimateという素晴らしいメソッドがあるじゃないか」と思われるかもしれませんが、残念ながらsvgのstroke-dashoffsetのプロパティについては、animateメソッドではアニメーションさせることができません。
ですので、今回は昔ながらの方法(?)でのアニメーションの実装方法を簡単にご紹介していきたいと思います。
映像一般に言えることなのですが、モノや人が動く一瞬一瞬を切り取った静止画を連続して見せると、あたかも滑らかに動いているように見えてしまうという人間の目の錯覚を利用しています。
それをjQueryを利用して(地道に)実現しようとする場合、一定間隔で処理を行なうsetTimeoutsetIntervalといったメソッドを利用して、例えば「1秒間に点Aから点Bまで、点Xが移動する」といったような場合、まず一秒間に何コマ画像を用意するか(「フレームレート」)を決めた上で、点Aから点Bまでの距離を「L」とすれば、点Xを「 L / フレームレート 」の距離毎コマ動かした画像を、「 1 / フレームレート 」秒ごとに見せることで実現することができます。
今回はsetIntervalを使った、手書き風のsvg文字のアニメーションの実装方法をご紹介したいと思います。

setIntervalを使った手書き風のsvg文字のアニメーション

ただ点が移動する、というのとは違って見えますが、svgの手書き風アニメーションについても、先程ご紹介した原理の応用で実現することができます。
先程の「点X」を「 描画される線の先端 」、「 点Aから点Bまでの距離 」を「 svgのパスの長さ 」として考え、

  1. 「描画される線の先端」 = 「stroke-dashoffset」の値を、
  2. 毎コマ毎に「 svgのパスの長さ / フレームレート 」、
  3. 最大値( svgのパスの長さ )から減らして行く

という処理を行います。
【1】の処理は、対象のオブジェクトのプロパティの値を変更する、その名もattrというjQueryのメソッドを利用し

var path = $('#stroke'),
length = <先端の位置>;
path.attr('stroke-dashoffset',length);

とて、
【2】の値については、パスの長さが今回は1646、1秒間に30フレーム処理をするとして、

var path_length = 1646,
frame_rate = 30,
stroke_per_frame = path_length / frame_rate;

【3】は【1】と【2】を組み合わせて、setIntervalを利用して、

See the Pen SVG Handwrite-Text with JQuery by Shinji Yamamoto (@commono_yamamoto) on CodePen.


という比較的シンプルな書き方で実装が可能です。

※もし↑にcodepenが表示されていなかったら大変、お手数ですが、リロードをお願いします。。
※今回は一度書き終わったら止まるという処理になっていますので、すでに書き終わっていたら「RERUN」のボタンを押して下さい。

今回は比較的簡単にsvgのpathのアニメーションをjQueryで実装する方法をご紹介いたしましたが、pathの動きが一定のスピードになっていますので、次回は「jQuery easing plugin」の裏技(?)を使って自作のアニメーションの処理にイージングをかける方法をご紹介したいと思います。

前回記事「svgアニメーション

お問い合わせ

    個人情報利用目的への同意

    ※このサイトはCloudflare Turnstileよって保護されています。
    ※お客様が入力した個人情報はSSL暗号化信号によって保護されています。

    個人情報の利用目的
    このお問い合わせフォームでご提供いただく個人情報は、お問合せ等に対する回答や資料送付、その他ご連絡のために利用します。
    当個人情報を第三者に提供することはありません。
    当個人情報の取扱いを委託することはありません。
    必要事項を全てご入力下さい。入力内容に不備がある場合は、ご返信しかねる場合がございます。
    内容により、お時間をいただく場合がございます。
    当個人情報の利用目的の通知、開示、内容の訂正・追加または削除、利用の停止・消去および第三者への提供の停止(「開示等」といいます。)を受け付けております。
    開示等の求めは、info@commono.co.jpで受け付けます。
    統計ツールやクッキー、ウェブビーコン等を用いてご利用状況を調査していますが、これによる個人情報の取得、利用は行っておりません。
    当社の個人情報保護に対する取り組みは「Privacy Policy」を必ずご確認ください。

    COMMONO株式会社
    E-mail:info@commono.co.jp
    個人情報保護方針、個人情報の取扱いについて
    PRIVACY POLICY

    現在準備中です

    お気に入り

    お気に入りから削除

    選択したアイテムをお気に入りから削除しますか?