導入このエフェクトは Canvas で描画され、クラス継承を使用して実装されます。マウスが指定された Canvas の位置に移動すると、現在のマウスの位置にランダムな色の小さなボールが生成され、その後ボールがゆっくりと消えていきます。 効果図 実装手順
HTML構造 <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <meta name="viewport" content="width=デバイス幅、初期スケール=1.0"> <title>美しいボール</title> <スタイル> #キャンバス{ 左余白: 100px } </スタイル> </head> <本文> <canvas id="canvas">お使いのブラウザはキャンバスをサポートしていません</canvas> <!-- <script src="./underscore-min.js"></script> --> <!-- Underscore にはすでに _.random 関数がパッケージ化されています。これをインポートして手動でランダム関数を書く必要はありません。 --> <script src="./index.js"></script> </本文> </html> キャンバス環境を作成する// インデックス.js // 1. 現在のキャンバスを取得します。const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); // キャンバスのサイズスタイルを設定します。canvas.width = 1000; キャンバスの高さ = 600; キャンバス.スタイル.背景色 = '#000' 分析例 まず、キャンバス要素を見つけます。 定数キャンバス = document.getElementById("myCanvas"); 次に、コンテキスト オブジェクトを作成します。 const ctx = canvas.getContext('2d'); 幅と高さの背景色を設定する ライティングボール// インデックス.js // 2. ボールクラス class Ball { コンストラクタ (x, y, 色) { this.x = x; // x軸 this.y = y; // y軸 this.color = color; // ボールの色 this.r = 40; // ボールの半径 } // ボールを描画する render () { ctx.save(); ctx.beginPath(); ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2); ctx.fillStyle = this.color; ctx.fill(); ctx.restore(); } } 分析例
Ballクラスを継承するMoveBallクラスを実装する// インデックス.js // 3. ボールを動かすクラス class MoveBall extends Ball { // コンストラクタ (x, y, color) を継承します { スーパー(x, y, 色); // 数量の変化 // ボールのランダム座標 this.dX = Random(-5, 5); this.dY = ランダム(-5, 5); // ボールは最初は大きく、その後ゆっくりと消えていくため、半径を減少させるための乱数 this.dR = Random(1, 3); } // 4. ボールの位置と半径を変更する upDate () { this.x += this.dX; this.y += this.dY; this.r -= this.dR; // ボールの半径が0未満かどうかを判定する 0 の場合 this.r = 0 // 半径が 0 の場合、ボールは消えます} } } 分析例
ボールをインスタンス化する// インデックス.js // 5. ボールをインスタンス化する // 生成されたボールを保存する let ballArr = []; // ランダム関数を定義する underscore-min.js を参照する場合は、ランダム関数を書く必要はなく、_.random を直接使用できます。 ランダム = (最小値, 最大値) => { Math.floor(Math.random() * (max - min) + min) を返します。 } // マウスの動きをリッスンする canvas.addEventListener('mousemove', function (e){ // ランダムな色 // 固定の色の配列を使用することもできます let colorArr = ['red', 'green', 'blue', 'yellow', 'orange', 'pink']; // bgcolor ==> colorArr[Random(0, colorArr.length - 1)] bgColor = `rgb(${Random(0,256)}, ${Random(0,256)}, ${Random(0,256)})` とします。 ballArr.push(新しいMoveBall(e.offsetX, e.offsetY, bgColor)); console.log(ballArr); }) // タイマーを開始する setInterval(function () { // 画面をクリアします ctx.clearRect(0, 0, canvas.width, canvas.height); // ボールを描画します for (let i = 0 ; i < ballArr.length; i++ ) { ballArr[i].render(); ボールArr[i].upDate(); } }, 50); 分析例
画面をクリアしないボールの半径が徐々に小さくなっていることがわかりますが、ボールは最終的に消えません。これは間違いなく私たちが望んでいる効果ではありません。画面をクリアするとどのような効果がありますか?記事冒頭のエフェクトです! (ベイビー、楽しんでね❤) index.js の完全なコード// 1. 現在のキャンバスを取得します。const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); // キャンバスのサイズスタイルを設定します。canvas.width = 1000; キャンバスの高さ = 600; キャンバス.スタイル.背景色 = '#000' // 2. ボールクラス class Ball { コンストラクタ (x, y, 色) { this.x = x; y = y; this.color = 色; r = 40; を出力します。 } // ボールを描画する render () { ctx.save(); ctx.beginPath(); ctx.arc(this.x, this.y, this.r, 0, Math.PI * 2); ctx.fillStyle = this.color; ctx.fill(); ctx.restore(); } } // 3. ボールを動かすクラス class MoveBall extends Ball { // コンストラクタ (x, y, color) を継承します { スーパー(x, y, 色); // 数量の変化 // ボールのランダム座標 this.dX = Random(-5, 5); this.dY = ランダム(-5, 5); // 半径が小さい乱数 this.dR = Random(1, 3); } // 4. ボールの位置と半径を変更する upDate () { this.x += this.dX; this.y += this.dY; this.r -= this.dR; // ボールの半径が0未満かどうかを判定する 0 の場合 .r = 0 です } } } // 5. ボールをインスタンス化する // 生成されたボールを保存する let ballArr = []; // ランダム関数を定義する underscore-min.js を参照する場合は、ランダム関数を書く必要はなく、_.random を直接使用できます。 ランダム = (最小値, 最大値) => { Math.floor(Math.random() * (max - min) + min) を返します。 } // マウスの動きをリッスンする canvas.addEventListener('mousemove', function (e){ // ランダムな色 // 固定の色の配列を使用することもできます let colorArr = ['red', 'green', 'blue', 'yellow', 'orange', 'pink']; // bgcolor ==> colorArr[Random(0, colorArr.length - 1)] bgColor = `rgb(${Random(0,256)}, ${Random(0,256)}, ${Random(0,256)})` とします。 ballArr.push(新しいMoveBall(e.offsetX, e.offsetY, bgColor)); console.log(ボールArr); }) // タイマーを開始する setInterval(function () { // 画面をクリアします ctx.clearRect(0, 0, canvas.width, canvas.height); // ボールを描画します for (let i = 0 ; i < ballArr.length; i++ ) { ballArr[i].render(); ボールArr[i].upDate(); } }, 50); 要約するこの小さなデモが、ES6 のクラスの理解と使用方法をよりよく理解するのに役立つことを願っています。 ES6 クラス継承を使用してゴージャスな小さなボールの効果を実現する方法についてのこの記事はこれで終わりです。 ES6 クラス継承を使用して小さなボールを実現することに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。 今後とも 123WORDPRESS.COM を応援してください。 以下もご興味があるかもしれません:
|
目次1. 準備2. MySQL暗号化関数方式2.1 MySQL 暗号化2.2 MYSQL 復号化3....
目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
0. 新しい操作: mkdir abc #新しいフォルダを作成 touch abc.sh #新しいフ...
Mysqlリモート接続構成を実装する2つの方法会社で働いていると、誰かのコンピュータに保存されている...
目次1. 観察可能2. 高階関数3. エクスプレスボックスモデル3.1. エクスプレスボックスモデル...
Flexの基本概念フレックス レイアウト (フレックスはフレキシブル ボックスの略)、エラスティック...
需要シナリオ:上司は、クローラーを使用してMySQLデータベースにデータを書き込んだり更新したり...
背景位置が背景画像の表示に与える影響この2日間のプロジェクトでホームページの写真を入れ替えていたとこ...
1. データベースクエリの速度に影響を与えるものは何ですか? 1.1 データベースクエリ速度に影響を...
Zabbix カスタム スクリプトを使用して監視データを収集する場合、通常、次の問題が発生します。サ...
実は、最近はウェブデザインについてよく耳にするようになりました。インターネット業界は今とても発展して...
META タグは、一般的に タグと呼ばれ、HTML Web ページのソース コード内の重要な HTM...
導入前回の記事では、Redis をインストールして設定しましたが、まだ終わりではありません。PHP ...
序文システム領域の使用量が大きすぎて消去する必要がある場合、または特定のファイルを消去する必要がある...