導入このエフェクトは 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 を応援してください。 以下もご興味があるかもしれません:
|
目次MySQL 8 の WITH クエリについて学ぶ1. 例3. 練習するMySQL 8 の WIT...
この記事では、角を丸くするためのjsキャンバスの具体的なコードを参考までに紹介します。具体的な内容は...
目次1. reduxとreactの関係2. Reactのマルチコンポーネント共有3. reduxの3...
目次1. コンポーネントの登録1.1 グローバル登録1.2 グローバルコンポーネントの登録プロセス1...
MySQLでホワイトリストアクセスを設定する手順1. ログイン mysql -uroot -pmys...
HTML は、World Wide Web 上で公開するために使用されるハイブリッド言語です。 XH...
この記事では、JavaScriptで動的なデジタル時計を実装するための具体的なコードを参考までに紹介...
リストは、類似または関連する一連の項目をリストするために使用されます。順序なしリスト(箇条書きリスト...
コンピュータ サイエンスで最も一般的に使用され、議論されているデータ構造の 1 つは、二分探索木です...
序文最近、4 年間実行されている Java EE Web プロジェクトでは、システムが開けないという...
目次1. 基本原則2. 特定のコード要約する1. 基本原則まず、生放送エリアを10の部分に分割し(個...
これが何を意味するのかを理解するには、まずサブディレクトリとは何かを知る必要があります。では、サブデ...
1. 公式 Web サイトから MySQL 5.7 インストール パッケージ (mysql-5.7....
目次ローカルミックスイングローバル ミックスイン要約するローカルミックスイン <テンプレート&...
ビジネス要件最近開発したプロジェクトの一つに、WeChat公式アカウントに関連したH5ページがありま...