導入このエフェクトは 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. コマンドの紹介tac (cat の逆順) コマンドは、ファイルの内容を行単位で逆順に出力します...
1. ip_hash: ip_hash は、送信元アドレス ハッシュ アルゴリズムを使用して、サーバ...
序文「High Performance MySQL」では、インデックスでは範囲フィールドの後の部分が...
CSSの背景プロパティの値背景色背景画像背景繰り返し背景位置背景添付複合プロパティ: 背景: ba...
ZooKeeperとはZooKeeper は、分散アプリケーションに効率的で可用性の高い分散調整サ...
1. 正常に生成されたアイコン ファイルをダウンロードし、名前を favico.ico に変更して、...
MySQL を自分でインストールするのに 3 時間かかりました。チュートリアルはたくさんあるにもかか...
1. キャンセル ボタンが押されたときの破線ボックス<br /> 入力に属性値 hide...
目次1. CentOS7.0へのJDK1.8のインストール2. Dockerのインストール3.Doc...
現在、Linux を使用するほとんどの人は、クラウド サーバーを使用するか、Windows 上に仮想...
目次1. データベースの使用を選択2. 情報を表示する3. テーブルを作成する4. データを挿入する...
序文Linux では「すべてがファイル」であることは誰もが知っているので、ファイルのオープン状態を確...
シェルスクリプトを使用したMySQLデータベースの自動バックアップデータベースを頻繁にバックアップす...