導入このエフェクトは 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. スタートアップメニューでは、カーソルを最初の行に移動します - eを押します 2. UTF-8...
FTP は主にファイル転送に使用され、Linux では vsftpd で実装されるのが一般的です。F...
目次1. 実施計画の概要2. 実行計画の実践id:選択タイプ:テーブル:タイプ:可能なキー:鍵:キー...
目次問題の説明レンダリング3種類のコード要約する問題の説明通常、表のヘッダーは折り返されませんが、ビ...
目次背景問題の場所さらなる分析要約する背景私のコース「Vue 3 エンタープライズレベルの音楽アプリ...
0. リモート開発が必要な理由組み込み Linux を開発する場合、便宜上、通常は Windows ...
複数の注文を含むリストが必要です。各注文は一意にすることも、複数の注文を結合することもできます。各注...
目次水波効果実装を見てみましょう水の波紋のデフォルトスタイルをカスタマイズする水の波紋の位置と直径を...
目次1. 優先キューの紹介2. 優先キューのカプセル化1. 優先キューの紹介通常のキューに要素が挿入...
1. 概要この記事では、DOCTYPE要素を体系的に説明します。同時に、多くの情報を調べました。イン...
目次最適化の第一歩: 軽量ベースイメージの使用第2段階の最適化:多段階構築Docker は、ソフトウ...
W3C 標準化プロセスは 7 つの異なるステップに分かれています。 W3C 標準化プロセスは 7 つ...
序文JavaScriptはWebフロントエンドで広く使われている言語の一つであり、Webアプリケーシ...
SASS で定義された変数では、後で設定された値によって古い値が上書きされます。 $色: 赤; $色...
Docker は、安全で繰り返し可能な環境でソフトウェアを自動的にデプロイする方法を提供し、コンピュ...