anime.jsを使ってスルスル動くロゴを作る練習してみた。
1.前提
このページのコードでは、jqueryとanime.jsを使っています。
サンプル1.すぅいーん すすすす
<div id="wansuke_anime1" class="anime-str-arrow-left" anime-str="WANSUKE" face="Monotype Corsiva"> <div class="icon-base wansuke-icon small-in-opacity"></div> </div>
こんな感じのタグを書くと↓こうなるソースを書いてみた。
サンプル2.ぎゅん! すすすす
<div id="wansuke_anime2" class="anime-str-arrow-left" anime-str="WANSUKE" face="fantasy"> <div class="icon-base wansuke-kirarin spin-in-opacity"></div> </div>
こうすると、↓こうなる。
2.ソースコード
javascriptは、こんな感じ。
$(function (){ $('div.anime-str-arrow-left').each(function () { let $logo = $(this); let fonts = $logo.attr('anime-str').split(''); let face = $logo.attr('face'); let lg_width = parseInt($logo.css('width'))-80 ; if (fonts.length) { let step_lng = lg_width / fonts.length for (let i=0 ; i < fonts.length ; i++) { let $font = $("<font />").attr('face', face).attr('stop-pos',step_lng*i-lg_width - 10).addClass('slide-left').text(fonts[i]); $logo.append($font); } } }); var anime_sample1_2 = anime.timeline({duration: 300, direction: 'normal', easing: 'easeInOutQuart'}); $('#wansuke_anime1 font.slide-left').each(function (){ anime_sample1_2.add({ targets: this, translateX: $(this).attr('stop-pos') }); }); anime_sample1_2.pause; var anime_sample1 = anime({ targets: '.small-in-opacity', opacity: 0, duration: 1500, scale: 3, direction: 'reverse', loop: 1, easing: 'easeInOutQuart', complete: function (){ anime_sample1_2.restart(); }, }); var anime_sample2_2 = anime.timeline({duration: 300, direction: 'normal', easing: 'easeInOutQuart'}); $('#wansuke_anime2 font.slide-left').each(function (){ anime_sample2_2.add({ targets: this, translateX: $(this).attr('stop-pos') }); }); anime_sample1_2.pause; var anime_sample2 = anime({ targets: '.spin-in-opacity', opacity: 0, duration: 1500, scale: 3, rotate: '2turn', direction: 'reverse', loop: 1, easing: 'spring', complete: function () { anime_sample2_2.restart(); } }); $("#anime_sample1").on('click', function (){ anime_sample1.restart() }); $("#anime_sample2").on('click', function (){ anime_sample2.restart() }); });
属性「anime-str」で設定された文字を、属性「face」で指定したフォントでスライドさせている。
CSSは適当にこんな感じ。
div.anime-str-arrow-left { display: inline-block; position: relative; width: 220px; height: 55px; overflow: hidden; } div.icon-base { position: absolute; width: 50px; height: 50px; background-size: contain; background-repeat: no-repeat; background-position: center; } div.wansuke-icon { background-image: url(wp-content/uploads/2018/10/wanchan_.png); } div.wansuke-kirarin { background-image: url(wp-content/uploads/2018/11/wan2.png); } div.anime-str-arrow-left font.slide-left { position: absolute; right: -20px }
とりあえず、動くレベルまで調整してみたけども、ソースぐちゃぐちゃになってしまったぁ・・・。