クールな花火効果を実現するjs

クールな花火効果を実現するjs

この記事では、jsを使用してクールな花火効果を実現するための具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

プロセス全体の考え方を明確にする必要があります。

まず、花火の効果を表現するキャンバスを作成し、次に花火のプロセスについて考えます。花火は通常、最初に空に飛び、その後、多くの小さな花火に分散し、それぞれの小さな花火は異なるスタイルと動きを持っていることは誰もが知っています。

全体的なアイデアとしては、まず大きな花火として div を作成します。大きな花火がマウスをクリックした位置に移動すると、大きな花火は消え、その後、さらに小さな花火が生成されます。これらの小さな花火の移動軌跡のスタイルは異なります。

1. 花火の効果を表示するキャンバス(div)を作成する

/*キャンバスの CSS スタイルを設定します*/
#容器 {
        幅: 80%;
        高さ: 600px;
        境界線: 1px 赤実線;
        位置: 相対的;
        マージン: 20px 自動;
        カーソル: ポインタ;
        背景:黒;
    }
<!-- div を設定します -->
<div id="コンテナ"></div>

2. ノードを取得する

 //ノードを取得します var app = document.getElementById('container');
        //アプリのバインディングイベントを設定する app.onclick = function(event) {
                var e = イベント || window.event
               //マウスクリック位置の座標を取得します。var pos = {
                    cy: e.offsetY、
                    cx: e.オフセットX
                }
                新しいFire(アプリ、pos)
            }

花火を実現するプロセス:まずマウスをクリックした位置に移動する大きなdivを実現し、次に多数のdivに広げます

3. まず大きな花火を実装します(乱数メソッド、ランダムカラーメソッド、モーション関数を呼び出す必要があります)

// コンストラクタ関数 Fire(app, pos) {
            // プロパティを変数に設定します this.app = app;
            this.pos = pos;
            // 大きなdivを作成する
            this.bf = document.createElement('div');
            //クラス名を設定します this.bf.className = 'fire';
            // スタイルを設定 this.bf.style.left = this.pos.cx + 'px';
            this.bf.style.background = this.getColor();
            this.app.appendChild(this.bf);
            //モーション関数を呼び出す this.move(this.bf, {
                トップ: this.pos.cy
            }, () => {
                this.bf.remove();
                this.smallFire();
            })
        }

3.1 まず火のスタイルを設定する

これは初期の火の​​スタイルです

 。火 {
        背景: 赤;
        位置: 絶対;
        /* 下を設定すると、マウスのクリック位置を差し引いた最大値が上になります*/
        下: 0px;
        幅: 6px;
        高さ: 6px;
    }

3.2 乱数とランダムカラーを設定する方法(プロトタイプオブジェクト)

//乱数を取得するメソッド Fire.prototype.rand = function(min, max) {
            Math.round(Math.random() * (max - min) + min) を返します。
        }
 
 
//ランダムな色を取得するメソッド Fire.prototype.getColor = function() {
         合計を '#' とします。
         (i = 0; i < 6; i++ とします) {
               合計 += this.rand(0, 15).toString(16)
           }
             合計を返します。
           }

3.3 モーション関数をカプセル化する(プロトタイプオブジェクト)

Fire.prototype.move = function(ele, target, cb) {
                // クリア間隔(times);
                times = setInterval(function() {
                    // コンソールログ(これ);
                    var onOff = true;
                    // 移動の方向とターゲットをトラバースする for (let attr in target) {
                        // attr は移動の属性を表します // console.log(attr);
                        // 要素属性のリアルタイム値を取得する let tmpVal = parseInt(this.getPos(ele, attr))
                            // 速度を計算する
                            // console.log(tmpVal, attr);
                        speed = (target[attr] - tmpVal) / 10とします。
                        // ラウンド速度 = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
                        // タイマーを停止し、属性が位置に移動したらスイッチ状態を設定します。if (tmpVal == target[attr]) onOff = true;
                        // 要素を移動します ele.style[attr] = tmpVal + speed + 'px';
                    }
 
                    // スイッチの状態を判定し、タイマーをクリアします for (var moveAttr in target) {
                        // 等しくない場合は、一部の属性が位置に移動されていないことを意味し、タイマーを停止することはできません。if (target[moveAttr] !== parseInt(this.getPos(ele, moveAttr))) {
                            オンオフ = false;
                            壊す;
                        }
                    }
                    オンオフの場合
                        クリア間隔(回);
                        cb && cb();
                    }
                    // コンソールログ(1111);
                }.bind(これ), 30)
            }
            // 要素のリアルタイム位置を取得する関数 Fire.prototype.getPos = function(obj, attr) {
            if (obj.currentStyle) { // CSSスタイルを取得します return obj.currentStyle[attr];
            } それ以外 {
                getComputedStyle(obj)[attr]を返す
            }
        }

以上の手順で、大花火の移動軌跡を取得できます。大花火は指定の位置に移動すると消え、消えた場所から多数の小花火が生成されます。これまでの分析から、小型花火の移動軌跡やスタイルが異なることがわかります。次のステップは、小型花火を実現することです。

4. 小型花火の実施

4.1 samll-fireのスタイル設定

これはsamll-fireの初期特性である

.small-fire {
        幅: 10px;
        高さ: 10px;
        位置: 絶対;
        境界線の半径: 50%;
    }

4.2 小さな花火のプロパティを設定する

//小さな花火 Fire.prototype.smallFire = function() {
            //まず、小さな花火の数を設定します。let num = this.rand(50, 60)
            // それぞれの小さな花火を走査して異なるスタイルを設定します for (let i = 0; i < num; i++) {
                sf = document.createElement('div'); とします。
                sf.className = 'small-fire';
                sf.style.left = this.pos.cx + 'px';
                sf.style.top = this.pos.cy + 'px';
                sf.style.background = this.getColor();
                //コンソールログ(sf);
                //ページに追加 this.app.appendChild(sf);
                //小さな花火の軌道を円運動にします//var top = parseInt(Math.sin(Math.PI / 180 * 360 / num * i) * r) + this.pos.cy;
                //var left = parseInt(Math.cos(Math.PI / 180 * 360 / num * i) * r) + this.pos.cx;
                 // 小さな花火にランダムな位置を指定します。キャンバス内の任意の位置にすることができます。let top = this.rand(0, this.app.offsetHeight - sf.offsetHeight);
                 left = this.rand(0, this.app.offsetWidth - sf.offsetWidth); とします。
                //モーション関数を呼び出す this.move(sf, {
                    トップ: トップ、
                    左: 左
                }、 関数() {
                    sf.remove();
                })
            }
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 花火効果を実現するための js シミュレーション
  • 花火効果を実現するネイティブJS
  • とても美しいjs花火効果
  • クリック花火効果を実現する js
  • 花火効果を実現するJavaScript(オブジェクト指向)
  • JavaScript でサウンド効果付きの花火効果を実装する
  • JavaScriptは5つの異なる花火効果を実装します

<<:  mysqlはストアドプロシージャを使用してツリーノード取得メソッドを実装します。

>>:  Docker の MySQL コンテナのタイムゾーン問題の修正

推薦する

4つの柔軟なScssコンパイル出力スタイル

多くの人は、Scss を使用する瞬間からコンパイル方法を説明されてきました。したがって、コマンドのコ...

JavaScriptは文字の出現回数をカウントします

この記事の例では、文字の出現回数をカウントするJavaScriptの具体的なコードを参考までに共有し...

ページの下部にHTMLフッターを配置する簡単な方法

要件:ページ コンテンツが短く、ブラウザーの高さをサポートできない場合でも、フッターをウィンドウの下...

HTML で複数のフォームのテキスト ボックスを揃える方法

フォームのコードは図の通りです。スタイルシートがまだ追加されていないため、フォームが整列されておらず...

HTML タグでの this の使用法の紹介

例えば:コードをコピーコードは次のとおりです。 <html> <ヘッド> &...

Windows Server 2016 に Docker をインストールするプロセスと発生した問題

前提条件Windows Server でコンテナーを実行するには、Windows Server (半...

CentOS7 ファイアウォール操作コマンドの完全なリスト

目次インストール: 1. ファイアウォールの基本的な使い方2. ファイアウォールd-cmdを設定する...

Nginx に React プロジェクトをデプロイする方法の例

テストプロジェクト: react-demo react-demo プロジェクトをサーバーにクローンし...

Linux スワップ パーティション (詳細説明)

目次リナックス1. SWAPとは2. swappiness は何を調節しますか? 3. スワップ操作...

MySQL SQL 最適化チュートリアル: IN クエリと RANGE クエリ

まず、in() クエリについて説明します。 「High Performance MySQL」では、イ...

MySQL 5.7.10 winx64 のインストールと設定方法のグラフィック チュートリアル (win10)

MySQL は比較的使いやすいリレーショナル データベースです。今日は、win10 システムを再イ...

Windows 10 に付属する仮想マシンのネットワークを設定するための詳細な手順 (グラフィック チュートリアル)

1. サーバー ホストをクリックし、右側の操作リストで [仮想スイッチ管理] をクリックして、仮想...

html mailto(メール)の実用化について

ご存知のとおり、mailto は Web デザインと制作において非常に実用的な HTML タグです。...

div+css3 を使用して背景グラデーション ボタンを実装するためのサンプル コード

フロントエンド ページの需要が増加し続けるにつれて、一部のシーンではグラデーションの背景要素が必要に...