anime.jsでripple effect(波紋効果)を作ってみたよ
- 2021.08.29
- 01_技術ブログ JavaScript
- #Javascript
こんにちは!
プログラム学習中のdynaです!
この記事は anime.jsの公式サイトに載っているページを少しアレンジしてデモで作成した内容 になります。
デモはこちら↓
表示されている丸をクリックすると、動きます。
See the Pen ripple effect(波紋効果) anime.js by dyna (@sakudyna) on CodePen.
公式サイトはこちら ⇒ https://animejs.com/documentation/
日本語版はこちら ⇒ https://tr.you84815.space/animejs/staggering.html
anime.jsって?
JavaScriptのアニメーションライブラリです。
軽いファイルで面白いアニメーションがたくさん使えます。
公式サイトからDLしてJSファイルを読み込めば使用できます。
面白いアニメーションがたくさん!
広告
コード
コードを記載します。
HTMLは自分のローカル環境に作った場合です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>サンプル</title> <link rel="stylesheet" href="anime.css"> <script type="text/javascript" src="./js/anime.min.js"></script> <script type="text/javascript" src="./js/sampleAnime.js"></script> </head> <body> <div class="wrapper"> <div class="el"></div> </div> </body> </html> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | body{ width: 100%; height: 100vh; display: flex; align-items: center; justify-content: center; background: rgb(23, 22, 87);//背景色 } .wrapper{ width: 300px;//サイズ height: 300px; } .el{ position: relative; display: flex; flex-wrap: wrap; width: 100%; height: 100%; } .item{ width: 20px; height: 20px; margin: 1px; border-radius: 50% 50% 50% 50%; //丸に表示する background:radial-gradient(#78b3ff,rgb(47, 45, 161));//丸の色 } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | //.elを取得 const el = document.querySelector('.el'); //破片を作成 const fragment = document.createDocumentFragment(); //156個のdivを作成 for (let i = 0; i < 156; i++) { let el_item = document.createElement('div'); el_item.classList.add('item'); fragment.appendChild(el_item); } el.appendChild(fragment); el.addEventListener('click',function(){ anime({ targets: '.item', scale: [ { value: .1, easing: 'easeOutSine', duration: 500 }, { value: 1, easing: 'easeInOutQuad', duration: 1200 } ], // loop: true, //列、行 delay: anime.stagger(100, {grid: [13, 12], from: 'center'}) }); }) |
HTMLで表示部分を作成
HTMLの以下の部分で、表示物を作成する部分を記載します。
1 2 3 4 5 | <div class="wrapper"> <div class="el"></div> </div> |
JavaScriptで丸を描く
JSの以下の部分で、丸を156個書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //.elを取得 const el = document.querySelector('.el'); //破片を作成 const fragment = document.createDocumentFragment(); //156個のdivを作成 for (let i = 0; i < 156; i++) { let el_item = document.createElement('div'); el_item.classList.add('item'); fragment.appendChild(el_item); } el.appendChild(fragment); |
anime.jsの値を設定する
anime.jsの値を設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | anime({ targets: '.item', scale: [ { value: .1, easing: 'easeOutSine', duration: 500 }, { value: 1, easing: 'easeInOutQuad', duration: 1200 } ], //列、行 delay: anime.stagger(100, {grid: [13, 12], from: 'center'}) }); |
各設定項目は以下です。
targets ・・・ アニメーションさせたいエレメントを指定する。
CSSセレクター ( 書き方の例 targets: ‘.item’)
DOMノードまたはNodeList( 書き方の例 targets: el.querySelector(‘.item’), targets: el.querySelectorAll(‘.item’))
オブジェクト( 書き方の例 targets: myObjectProp)
配列( 書き方の例 targets: [‘.item’, el.getElementById(‘#thing’)])
と指定できる。
参考:
scale・・・CSSのプロパティ。デモではeasing、durationを設定する。
使用できるeasing は以下にデモあり↓
https://animejs.com/documentation/#pennerFunctions
duration はアニメーションの時間をミリ秒で設定します。
delay: anime.stagger(ディレイの間隔, {grid: [列, 行], from: ‘起点の場所’})
grid・・・表示しているdivの列数と行数を指定します。
起点の場所・・・どこから波紋を起こすかを設定します。
例:delay: anime.stagger(200, {grid: [14, 5], from: ‘center’})
参考:
こんな形でデモができました!!
参考サイト様:
https://tr.you84815.space/animejs/staggering.html
https://attadesign.co.jp/blog/1212/
おまけ
おまけの波紋効果の別サンプルです。
クリックしてみてね。
See the Pen 波紋効果(波紋2)anime.js by dyna (@sakudyna) on CodePen.
参考サイト様:
https://unitypull.com/stagger/
いつもありがとうございます。
ここまで読んで下さりありがとうございます。
<あわせて読みたい>
広告