令和でSVGアニメーションanime.jsの使い方
今回は、以前案件で一度利用したことがある、JS で SVG アニメーションを行うライブラリと使い方をご紹介しようと思います。
令和というテキスト(SVG)を動かしてみます。
完成品
以下に作成したものを UP しますので、見てみてください。
https://korsmic.github.io/JWS-Blog/animejs-svg/
使用ライブラリ紹介
anime.jsというものを利用して実装を行います。
DL は以下の GitHub よりできます。
https://github.com/juliangarnier/anime/
まずは SVG(令和)を作成
イラストレーターで作成します。
フォントをアウトライン化して、SVG で保存します。
この際、余計な余白が付いてしまうと、面倒になるので、余白を外します。
「オブジェクト」⇒「アートボード」⇒「オブジェクト全体に合わせる」で余白を外せます。
HTML 実装例
- HTMLでanimejsを読み込みます。
- SVG を入れる要素を作り、中に作成した SVG を入れます。
- SVG の不要な部分は削除して問題ありません。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>令和でSVGアニメーション</title>
<style>
div,
body {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.wrap {
background-color: #000;
position: absolute;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
padding: 30px;
}
.svg {
max-width: 800px;
width: 100%;
background-color: #000;
}
</style>
</head>
<body>
<div class="wrap">
<div class="svg">
<svg
version="1.1"
id="reiwa"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 279.9 129"
xml:space="preserve"
>
<g>
<path
d="M0.1,75.3c0,0-0.1,0-0.1-0.1c0-0.2,0.1-0.3,0.5-0.3h0.1c1.3-0.3,2.2-0.6,2.7-0.9c0.6-0.5,1-0.9,1.6-1.2c7.5-4.7,12.9-9.6,27-24.9l23.7-28.6c0.6-1,1.1-1.8,1.8-2.8c0.3-0.6,1.3-2,2.5-3.3c2.1-2.6,3-4.2,3-6c0-1.9-0.8-2.8-2.9-3.9c0.8-0.3,1.6-0.8,1.6-0.8l1.8-1C65.4,0.5,67.2,0,69.1,0c2.1,0,4.8,0.8,7,2C78.3,3,79,4.2,79,6c0,1.9-0.6,2.7-4,4.6c1.5,3.7,3.1,5.8,12,15l18.9,19.2l5.3,4.6l5.5,5.4c1,0.9,2.3,1.7,4.2,2.6h0.5c0.6,0.4,1.3,0.9,1.6,1l2.8,1.5c0.3,0.3,1.4,1.1,3.1,2.4c0.5,0.3,2,1.3,4.1,2.7c1,0.8,1.8,1.3,2.3,1.6c0.9,1.1,1.9,2,3,2.8c0.1,0.3,0.9,0.8,1.9,1.4l-0.2,0.8c-4.8,0.8-9,1-12,1c-2.7,0-6.1-0.9-8.7-2.1c-2.4-0.5-8.1-5.5-15.1-13.5L86.1,33.3c-0.2-0.1-0.6-0.5-1.4-0.9c-0.6-0.3-1.5-1.5-2.9-3.3c-0.6-0.8-1.8-2.3-3.4-3.9l-1.4-1.4c-0.9-1-1.6-2.1-2.5-3c-1-1.2-1.8-1.8-3.6-2.8c-0.8-0.6-0.8-0.6-1.8-1.5l-0.3,0.4c-0.8,0.6-1.2,1.1-1.4,1.2c-0.8,0.8-1.5,1.6-2.3,2.5c-0.1,0.1-0.6,0.6-1.2,1l0.1,0.8l-2.5,3.1L40.3,51.9l-4.6,4.5c-6.3,7.1-8.9,9.2-16.2,13.7l-3,2.3L13,73.9C10.8,75.4,7.3,76,3.3,76H2.1c-0.6,0-0.9-0.1-1.1-0.6L0.1,75.3z M38.1,86.5c0-1.5,0-1.8,0.1-2.5c0.1-0.5,0.8-1.2,1.9-2.4c1.5-1.8,4.2-5.1,7.9-9.8C59.8,60.3,64.5,54.6,66.6,49c-0.8-0.9-1.5-1.3-1.8-1.5c-1-0.4-2.1-0.9-3.1-1.5l-1.8-1.9c-0.1-0.2-0.5-0.3-1.1-0.6c-0.3-0.2-0.9-0.6-1.5-1.1c0.9-0.2,1.5-0.3,1.6-0.4l3.9-2c1-0.4,2.1-0.8,3.3-0.8c3.7,0,4.8,0.6,9.7,5.1c5.2,4,5.4,4.3,5.4,5.5c0,0.9-0.8,2.4-1.7,3c-0.7,0.6-0.7,0.6-5.1,1.2c-3,0.2-13.9,7.8-17.2,11.8c-4.4,5.1-5.7,7.7-7.8,15.2c0.6,0.3,1,0.6,1.3,0.6c0.3,0,0.3,0,6.1-3c9.3-3.8,12-4.8,12.3-4.8c3.1-0.9,5.4-1.5,5.7-1.8l3-2.3c0.8-0.6,2-0.9,3-0.9c4.8,0,10,3.3,12,7.7c-1.6,1.8-2.1,2.3-4.8,3.6c-2.3,1-2.4,1.3-4.3,6.1c-4.2,8-8.3,13-12.9,16.2v0.6c0,1.2,0.4,1.8,2.5,2.8c9.4,6.8,13.6,12.1,13.2,17.1c0.8,2.3,0.8,2.3,0.8,2.4c0,1.5-1.6,3.5-2.8,3.5c-0.6,0-0.6,0-6.3-2.7c-2.9-2.1-4.6-3.5-5.3-3.8c-1-0.6-1.5-0.7-2.8-1.2c-0.8-0.1-1.6-0.4-2.5-0.8c-0.5-0.3-0.9-0.4-1.4-0.6c2.4-0.3,5.8-1.5,8.7-3.2c-1.6-3-3.6-4.6-7.3-6.6c-2.7-1.5-7.6-2.8-10.3-2.8h-0.9c-5.2-2.4-6.1-3.4-6.3-7.6l1,0.3v-0.4l2.4-0.3l3.6,0.5l2.9,0.1c0.3,0,0.9,0.2,1.6,0.3l3.1,0.9c0.4-0.6,0.8-1.1,1-1.4c3.9-4.6,5.9-8.4,8.3-15.4c1.9-4.5,1.9-4.5,1.9-5.4c0-0.3-0.1-0.8-0.5-1.4c-0.9,0.1-1.9,0.6-1.9,0.6l-1.4,0.6l-2.5,0.9l-2.1,1c-3,1.5-3.1,1.5-5.5,3c-2,1.2-2.4,1.5-12.4,8c-1,0.6-1.6,0.9-2.4,0.9c-2.7,0-5.5-1.8-8.5-5.5L38.1,86.5z"
/>
<path
d="M175.3,72.6c-5.7,5.1-5.7,5.1-6.8,5.1c-1.5,0-4.1-0.6-5-1.2c-6-4-6-4-6.7-5.4c0.1-0.8,0.6-2.4,1.6-5.1c1,1.4,2,2.1,2.7,2.1c1.5,0,1.5,0,11.2-5.2l5.5-3.5l24.1-12.9c0.3-1.3,0.4-2.2,0.4-2.4l0.2-6.3v-4.4c-0.2-1.6-0.6-2.3-2.4-3c1.8-1.3,2.8-1.8,4.3-1.8c4,0,9.1,2.7,9.1,4.9c0,0.6-0.5,2.5-1,5.3c-0.2,0.4-0.2,0.9-0.3,1.7l0.4,0.4c6.2,0.9,8.5,2,8.5,3.9c0,1,0,1-9.4,5.4c-0.8,0.8-0.9,1-1.5,5.3c0.8,0.5,1.3,0.8,1.6,0.9c2.5,1.4,3.3,2.3,3.3,3.8c0,1.7-0.9,3.6-2.4,5.5c-4.3,5.5-4.5,6-4.5,9.5v1c1.5-0.8,2.4-1.4,5.1-3.3c3.8-2.8,6-4.3,8.8-6c-0.9,2.1-3.4,5.5-7.6,10.2c-1.6,1.7-3.3,3.2-5,4.7l-0.6,0.9l-0.9,1.3c-0.3,1-0.3,1-0.5,8.1l0.1,3.4v27c0,2-0.9,3.3-2.4,3.3c-1.4,0-2.7-0.9-3.8-2.5c-0.6-0.6-3.5-6.6-3.5-6.9l0.3-2.3v-2.3c1.8-3,1.8-3,1.9-3.4c0.5-1.7,1.4-14.4,1.4-18.6c0-1.1-0.2-2-0.6-3.3c-0.6,0.7-1.3,1.3-1.5,1.3l-1,0.8l-1.5,1.6l-4,3.6c-0.6,0.3-2.8,3.3-4.8,6.5c-1.2,1.9-2.4,3-3.5,3c-0.8,0-2.4-0.7-3-1.3c-4.3-4.8-4.3-4.8-4.3-5.3c0-0.1,0.6-2.3,0.8-2.4c0.3-0.8,0.3-0.8,4.5-3.9l2.4-2.5l3.8-3.6l1.8-2.3c3.5-3.8,3.5-3.8,8.4-12.1c1.8-3,2.1-4.8,2.1-11.8c0-1.5-0.4-2.3-1.7-2.3c-1,0.6-1.6,1-2.1,1.3l-3.8,2c-2.4,1.4-4.8,2.7-6.9,4.2c-2,1.5-3.7,2.8-5.7,4.2l-3.9,2.7L175.3,72.6z M177.7,30.9c2-1,3.9-2.3,5.7-3.3c6-3.8,9-5.9,13.9-10.3c3.8-3.1,3.9-3.3,5.7-4.9c0.9-0.6,0.9-0.9,0.9-3.1c-1.2-0.9-1.5-1.1-2.6-1.4l-1.6-0.6c2.7-1.8,4-2.4,5.1-2.4c2.3,0,6,1.1,9.1,2.7c4.5,2.4,5.9,3.6,5.9,5.7c0,1.8-0.2,1.8-4,2.4c-0.6,0-2,0.8-4,2.1c-4,2.9-6.9,4.6-7.4,4.8l-3.4,1.8l-7.9,4.2c-8.6,3-10.7,3.4-15.2,3.4c-0.6,0-0.8,0-1.5-0.1L177.7,30.9z M237.3,94.2c0.8,2.4,0.8,2.4,0.8,2.7c0,0.6-0.2,1.4-0.9,3.2c-2.3-0.2-2.8-0.6-4.6-3.3c-5.1-9-8-24-5.9-31.5c0.9,1.4,1.5,2.3,1.7,2.8c0.5,1.4,0.8,2.7,1.2,4.2c0,0.1,0.8,1,1.8,2.1l0.9-0.2l1.2-1.2c0.9-1.5,2-3,2.8-4.4c0.6-0.9,0.6-0.9,12.9-5.4c8.3-2.8,14-4.5,17.1-4.7c0.2,0,0.2,0,2.3,0.5c3.6,0.6,4.5,0.9,6.9,2.3c2.3,1.2,4.5,4.5,4.5,6.3c0,0.9-0.9,1.8-1.8,1.8h-1c-3.5,0.6-5.7,2.4-9.3,7.5c-0.6,0.7-3.8,3.5-8.4,7.2c-1.5,1.2-2.5,2.7-2.5,3.5c0,0.3,0.1,0.6,0.3,1c0.9-0.3,1.3-0.5,1.6-0.5l2-0.2l2-0.3h1.2c4.2-0.9,4.2-0.9,4.5-0.9c3.5,0,8,3.6,8,6.6c0,1-0.8,2-1.7,2c-0.3,0-0.4,0-0.8-0.3c-1,0.4-1.8,0.8-1.9,0.8c-6.8-1.4-6.8-1.4-8.1-1.4c-5.1,0-11.1,0.5-12.6,0.9c-3.8,1.2-6.5,1.8-7.5,1.8s-2.1-1.5-2.7-4c0.2-0.3,0.2-0.6,0.3-0.6c0-0.1,0.4-0.3,1-0.6c0.3-0.2,0.8-0.6,1.5-1.3c0.3-0.3,1.5-1.2,3.3-2.7c8.5-7.5,8.8-7.8,12.3-12.3l4.5-5.3c0.8-0.9,1.2-1.5,2.1-2.8c-1.2-1.5-1.8-1.9-3.5-1.9c-1.8,0-1.8,0-5.4,1.8l-10,3.3c-5.8,2.4-5.8,2.4-6.9,2.4c-0.8,0-1.5-0.2-3.7-0.6l-0.3,1.2l-0.4,0.2c-0.2,0.6-0.2,1-0.2,1.2l-0.2,2.8l-0.4,4.1l0.4,2.2l0.3,2.9l1,4.2L237.3,94.2z"
/>
</g>
</svg>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script defer src="anime.min.js"></script>
</body>
</html>
JS の実装
今回は、文字の線を描画 ⇒ 塗りつぶしという順にアニメーションを実装します。
anime.timeline()
で開始します。add()
を繋げることで、アニメーションを繋げます。
こちらが参考ドキュメントになります。
https://animejs.com/documentation/#lineDrawing
$(window).on('load', function () {
anime
.timeline({
easing: 'easeInOutSine' //easingを指定
})
.add({
targets: '#reiwa path', // pathを指定
strokeDashoffset: [anime.setDashoffset, 50],
stroke: '#fff', // 線の色を指定
duration: 4000, // 描画までの時間を設定
delay: function (el, i) {
return i * 1500; // 2文字目以降は1500ms遅く開始
}
})
.add({
targets: '#reiwa path', // pathを指定
duration: 500, // 時間を指定
fill: '#fff' // 塗りつぶし色を指定
});
});
まとめ
いかがでしたしょうか。これぐらいのアニメーションであれば結構簡単にできるのではないでしょうか。
・・・まだまだ勉強しないとですね。