生のJavaScriptでの記述練習を行っています。
今回実装したい動きは、
①大小さまざまな円をランダムな位置にランダムな個数(~30個)発生させる
②fadeIn → fadeOut でゆっくり点灯
上記を一回の動作としてこれを繰り返すような動きを取り入れたいと考えております。
現在①については実装できたのですが、
点灯後における円の位置・個数のリセットができずに困っています。
質問は、
①fade機能の適切な実装方法(生JavaScript または CSSアニメーション)
②点灯終了後、また新たに円の再設定から始まる繰り返し処理の記述方法
についてご教示願います。
下記ソースコードになります。
HTML5
1 <main> 2 <div class="load"></div> 3 </main>
SCSS
1main { 2 position: relative; 3 overflow: hidden; 4 //anime.jsを使用した円の出し方 5 .load { 6 display: flex; 7 justify-content: center; 8 align-items: center; 9 width: 100%; 10 height: 100vh; 11 background: #fcfcf3; 12 } 13 .block { 14 display: inline-block; 15 position: absolute; 16 width: 50px; 17 height: 50px; 18 border-radius: 50%; 19 //アニメーションCSSによるフェード 20 animation: fadein 8s ease ; 21 transition-property: animation; 22 animation-iteration-count: 3; 23 } 24 @keyframes fadein { 25 0% { 26 opacity: 0; 27 } 28 50% { 29 opacity: 0.8; 30 } 31 100% { 32 opacity: 0; 33 } 34 } 35}
JavaScript
1window.addEventListener('DOMContentLoaded', function() { 2 3 let load = this.document.querySelector('.load'); 4 5 //30個のカラフルな円を出現させる繰り返し条件 6 function colorCircles() { 7 for(let i=0; i<30; i++) { 8 let blocks = this.document.createElement('div'); 9 blocks.classList.add('block'); 10 //HTMLドキュメントに"block"クラスを持つdiv要素の追加 11 load.appendChild(blocks); 12 13 //anime.jsでblockクラスの円をカスタム 14 anime ({ 15 targets: '.block', 16 translateX: function() { 17 return anime.random(-700, 700); 18 }, 19 translateY: function() { 20 return anime.random(-450, 450); 21 }, 22 scale: function() { 23 return anime.random(1,3); 24 }, 25 }); 26 } 27 } 28 colorCircles(); 29});
このソースコードでは新しく円を生成できないと同時に、
anime.js特有の動き(中心からぶわっと円が放散するような動き※CSSアニメーションでfadeを付けたらなくなりました)があったので、
anime.jsを使用しない円のカスタム方法も作ったので下記に載せておきます
HTML5
1 <main> 2 <div class="load2"></div> 3 </main>
SCSS
1main { 2 position: relative; 3 overflow: hidden; 4 5 //anime.js未使用の円の出し方 6 .load2 { 7 width: 100%; 8 height: 100vh; 9 background: #fcfcf3; 10 overflow: hidden; 11 } 12}
JavaScript
1window.addEventListener('DOMContentLoaded', function() { 2 3 let load2 = this.document.querySelector('.load2'); 4 5 function colorfulBalloon(n, max, min) { 6 let balloon = document.createElement("div"); 7 balloon.className = "balloon"; 8 balloon.style.borderRadius = "50%"; 9 balloon.style.position = "absolute"; 10 11 for ( let i=0; i<n; i++ ) { 12 let balloonClone = balloon.cloneNode(); 13 14 let size = Math.random() * (max - min) + min; 15 16 balloonClone.style.top = "calc(" + -1 * size * Math.random() + "px + " + Math.random() * 100 + "%)"; 17 balloonClone.style.left = "calc(" + -1 * size * Math.random() + "px + " + Math.random() * 100 + "%)"; 18 balloonClone.style.width = size + "px"; 19 balloonClone.style.height = size + "px"; 20 load2.appendChild(balloonClone); 21 } 22 } 23 //実行 24 colorfulBalloon(10, 150, 50); 25});
こちらはfadeを実装できておりません。
長くなりましたが、何卒よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー