SVGを使った面白そうなテキストのアニメーションを再現してみました
東急エージェンシー 2017採用サイト | Tokyu Agency Inc.
↑こちらのサイトで使われていた、SVGを使ったテキストのアニメーションが面白かったので、
自分なりに再現してみました。
↓こちらが再現してみたもの (IE, Edge以外のブラウザで動作します)
方法
手順は以下のとおり
- IllustratorでSVGを準備する
- 作成したSVGをHTMLにインラインSVGとして配置
- jQueryとCSS3を使って要素を移動させてアニメーションさせる
1. SVGを準備する
まずはIllustratorを使って、効果をつけるテキストのSVGを作成します。
今回紹介しているアニメーションに使われているテキストは、正方形を斜めに切った直角三角形でできています。
そのため、この直角三角形を組み合わせることで、目的のテキストを形作っていきます。
できたら、SVG形式で書き出します。
2. 作成したSVGをHTMLにインラインSVGとして配置
書き出したSVGをテキストエディタ等で開き、SVG内の要素をコピーしてHTML内の目的のSVG要素内にペーストします。
1 2 3 4 5 6 7 | <div> <svg id="svgText" viewBox="0 0 320 160"> <polygon points="45,63 38,56 45,56 "/> <polygon points="45,63 38,63 38,56 "/> ・・・ </svg> </div> |
3. jQueryとCSS3を使って要素を移動させてアニメーションさせる
まずはCSSで目的の要素にtransitionを設定することで、アニメーションの準備をします。
今回のSVGの要素はすべてpolygonなので、以下のように設定しました。
アニメーション中のSVG内の要素がSVGをはみ出しても見切れてしまわないように、
overflowをvisibleに設定するのもポイントです(デフォルトではSVGのoverflowはhiddenになっているため)。
1 2 3 4 5 6 7 8 9 | svg { max-width: 100%; overflow: visible; } svg polygon { -webkit-transition: 0.4s; -ms-transition: 0.4s; transition: 0.4s; } |
さらに、以下の様なjQueryのコードを設定してアニメーションを実装します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $(function() { var $targetSvgElm = $("#svgText"); //SVG要素を取得 //SVGにマウスを合わせるか、クリックしたらアニメーションを実行 $targetSvgElm.on("mouseenter click", function() { svgAnimation(); }); function svgAnimation() { //SVG内のpolygonそれぞれを実行 $targetSvgElm.find("polygon").each(function() { //X方向とY方向の移動位置をランダムに決定し、CSSのtransformで設定 var xPosition = Math.random() * (100 - (-100)) + (-100), yPosition = Math.random() * (100 - (-100)) + (-100); $(this).css("transform", "translate(" + xPosition + "px, " + yPosition + "px)"); }); //1秒経ったらSVGのpolygonを本来の位置に戻す var $timer = setTimeout(function() { $targetSvgElm.find("polygon").css("transform", "translate(0, 0)"); clearTimeout($timer); }, 1000); } }); |
アニメーションはmouse enterまたはclickのタイミングで起こるようにしました。
アニメーションが開始したら、
SVG内の要素をランダムにCSSのtransformで移動させておき、
1秒経ったら本来の位置に戻すという操作によってアニメーションを実装しています。
アニメーション自体は難しいものではありませんが、
アイディアがすごいと思いました。
Author Profile
NINOMIYA
Webデザイナー兼コーダー出身のフロントエンド開発者です。 UXデザインやチーム開発の効率化など、勉強中です。
SHARE