[css]SVGでアニメーションをつくってみた

僕のポートフォリオサイトのトップページにアクセスすると、ローディングアニメーションが再生されるようになっています(マイクロバスが走っている様子)。

loading

これです。

これは当初、アニメーションGIFで作成して公開していましたが、閲覧環境によってはどうにも動きがガタついて見えてしまい、特にスマートフォンの場合それが顕著でした。せっかくレスポンシブ対応なのに・・・。

これではいかんと言うことで、早速GIFではなく、SVGファイルに作り直し、これをCSS3のアニメーションで表現させてみました。

イラストを分解してSVGに

01

まずマイクロバスのイラストを、車体部分とタイヤ2本に分解して、3つの独立したsvgファイルとして書き出します。

これらを、それぞれ別な動きをさせることで、あたかも走っているかのように見せていきたいと思います。

元々このイラストはAdobe IllustratorCCで作成しているので、これをそのまま「SVG形式」で書き出すことができます。HTMLファイルから、このsvgファイルを読み込んで、CSSで動きをつける、という流れになります。

SVG(Scalable Vector Graphics)とは、1998年に誕生したベクターイメージフォーマットで、画像ファイル形式の一つです。ラスターイメージと違い、画像を拡大表示しても画質が劣化せず、ファイルサイズも小さく抑えられるなどのメリットがあります。

CSSで動きをつける

まずは、車体のsvgファイルに対して、以下の一連の動きをつけていきます。

02
  1. 前部を斜め左上を向くように、回転
  2. そのまま少しだけ真上に、移動
  3. 後部を斜め右上に回転させ、平行になるように
  4. 前部を斜め右下を向くように、回転
  5. そのまま少しだけ真下に、移動
  6. 後部を斜め右下に回転させ、平行になるように

これを連続でループさせます。

ではこの一連の動きを、CSS3でアニメーションさせるには、どうすれば良いのかというところですが、まずアニメーションを定義づけする必要があります。

上記のように、車体部分を”#bus”というIDでタグを付与し、”#bus”のアニメーションを指定します。それぞれのプロパティと値の解説は以下の通り。

animation-name:anime;  ←アニメーションの名前をつける。この場合は”anime”とつけた。
animation-duration:0.5s;  ←一連の動き一回分に要する時間。この場合は0.5秒と設定。
animation-timing-function:linear;  ←アニメーションの進行の度合い。この場合は、一定のスピードで動く。
animation-iteration-count:infinite;  ←アニメーションのループ回数。この場合は無限。

これで車体部分のアニメーションの定義が完了しました。

次に、上記でアニメーション定義した”anime”に実際の動きをつけます。

上記のコードの1行目を見てください。

何やら”@keyframes”などという単語が出てきましたが、これは定義したアニメーションの動きを指定するためのプロパティです。

キーフレームとはアニメーションにおいて、時間軸上の特定の位置(フレーム)の、要素(今回の場合はバスとタイヤですね)の状態や位置を決定する印です。
CSSでキーフレームを指定する場合は、パーセンテージで指定することができます。
すなわち、0%はアニメーションの初期値。100%はアニメーションの終わりをあらわします。

@keyframes  アニメーションの名前 { キーフレーム { 動きをつけるプロパティ : 値 ;} }

上記の規則でCSSを指定していきます。細かい上記のコードの解説は以下の通り。

@keyframes anime ←”anime”にキーフレームを挿入
0% {transform:rotate(0deg) ;}  ←アニメーションの一番はじめ。初期値。
15% {transform:rotate(3deg) ;}  ←要素を3度回転させる。
30% {transform:translateY(5px) ;}  ←要素を5px真上に移動させる。
45% {transform:rotate(0deg) ;}  ←回転を元に戻し、平行に。
60% {transform:rotate(-3deg) ;}  ←要素を-3度回転させる。
75% {transform:translateY(-5px);}  ←要素を5px真下に移動させる。
100%{transform:rotate(0deg) ;}  ←アニメーションの一番最後。初期値に戻す。

これらの一連の動きを0.5秒で動かします。無限ループで再生したアニメーションが以下です。

こうなります。

あとは残りの二つのタイヤの動きだけとなります。
タイヤの動きは、単純に上下に動かすだけです。タイヤの動きを加えた具体的な完成コードは以下の通り。

上記のように、タイヤをそれぞれ、”tire01″ “tire02″とし、それぞれのアニメーションを”tanime01” “tanime02″としてアニメーション定義を行いました。

animation-name:tanime01;  ←アニメーションの名前をつける。この場合は”tanime01″とつけた。
animation-duration:0.2s;  ←一連の動き一回分に要する時間。この場合は0.2秒と設定。
animation-timing-function:ease;  ←アニメーションの進行の度合い。この場合は、アニメーションの一連の動きの、はじまりとおわりがややゆっくり動く
animation-iteration-count:infinite;  ←アニメーションのループ回数。この場合は無限。

コードの38行目をみてください。二つ目のタイヤのみ、CSSの動きに”animation-delay:0.1s;”と書いてありますが、これはアニメーションの動きを0.1秒遅らせることを意味しています。

何故わざわざ、二つ目のタイヤだけこのような指定をしているかというと、二つのタイヤ、前輪と後輪の動きにズレを出すことによってより、車が走っているような表現を出すためです。

さて、これで今回のアニメーションは完成となります。これを実際に動かすと・・・

以上で、SVGファイルをCSSでアニメーションさせる方法はおしまいです。お疲れ様でした。

ここまでお読みくださり、誠にありがとうございました。

モバイルWi-Fiルーター『FREETEL ARIA2』を購入しました。

つい先日12月2日に発売されたばかりの、FREETELの『FREETEL ARIA2』を購入しました。

20161204_01

これはFREETELのモバイルWi-Fiルーター『ARIA』の後継機(?)にあたるのでしょうか。しかし、『ARIA』の定価17,800円に対し、こちらの『ARIA2』は11,800円です。6,000円安い。

しかもバッテリーの持ちも良く、17時間連続通信が可能、というふれこみです(具体的なスペックは公式ページをご確認ください)。

外観レビュー

本体のサイズは、正直なところ思っていたよりも大きい印象を受けました。iPhone5と比較した感じはこちら。

20161204_02

厚さはこのくらい(本体はシリコンケースに収まっており、着脱可能。)。

20161204_03

同梱物はUSBケーブルとアダプタ。

20161204_04

マニュアルの「本体付属品」記載には、電池パックが含まれているようですが既に本体に収まっているようです。一応本体のカバーを外して確認してみます。

フタが固い!

ではまず、シリコンカバーを取り外し本体裏側のカバーを外します。

背面の隅に凹みの部分があり、そこに爪を引っ掛けて取り外すのですが・・・これが固い!

20161204_05

凹み部分が小さいので、1円玉か何かのコインで引っ掛ける事も出来ないようです。

10分ほど悪戦苦闘し、何とか外す事が出来ました。

20161204_06

 

ちゃんとバッテリーは収まっているようです。

バッテリーを外すと・・・

20161204_07

FREETELのSIMも既に挿入されていました。

電源を入れてみる

20161204_08

本体のサイドに「電源ボタン」と「WPSボタン」が付いています。

ネットワークに接続するには、まず「電源ボタン」を入れてから「WPSボタン」を2回カチカチッとクリックするとネットワーク名とパスワードを確認できます。

20161204_09

ディスプレイ下の正方形のモザイクは、QRコードです。これをスマホのアプリなどでスキャンすれば、それだけでネットに接続が出来るという機能です。

とりあえず、ざっくりとFREETELの『FREETEL ARIA2』のレビューでした。最後までお読みくださりありがとうございました。