js キャンバスはランダムなパーティクル効果を実現します

js キャンバスはランダムなパーティクル効果を実現します

この記事の例では、参考のためにjsキャンバスランダムパーティクルエフェクトの具体的なコードを共有しています。具体的な内容は次のとおりです。

序文

Canvas はフロントエンドの特殊効果アートを実現します

結果

コード

html

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta http-equiv="X-UA-compatible" content="IE=edge">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>ドキュメント</title>
</head>
<本文>
    <script src="./main.js"></script>
</本文>
</html>

メイン.js

/*          
*パーティクルクラスの構造* クラス機能:
    *1. 初期化。キャンバスを作成し、パーティクルのプロパティなどを指定します。
    *2. 画像を作成して描画する *3. 領域の色を定義する *4. 粒子の動きと偏向角度 */

// 粒子を生成する let Particle = function(context, options){
    ランダム = Math.random();
    this.context = コンテキスト;
    // キャンバス内の x 座標 this.x = options.x;
    // キャンバス上の y 座標 this.y = options.y;
    // 乱数の 1/2 を取り、角度をランダムに拡大します。this.s = 0.5 + Math.random();
    // this.s = 1 + Math.random();
    // 粒子の動きの変化する角度 this.a = 0;
    // 幅 this.w = window.innerWidth;
    // 高さ this.h = window.innerHeight;
    // 半径 this.radius = options.radius || 0.5 + Math.random() * 10;
    // 色 this.color = options.color || "#E5483F";
    // コンソールにログ出力します。
    //3秒後に呼び出すように指定します。
    // パーティクルの半径が 0.5 より大きい場合は、新しいパーティクルを追加します。
    setTimeout(関数(){
        (この半径>0.5)の場合{
            粒子.push(
                新しいパーティクル(コンテキスト、{
                  x: this.x,
                  y: これ.y,
                  色: this.radius / 2 > 1 ? "#d6433b" : "#FFFFFF",
                  半径: this.radius / 2.2 })
            );
        }
    }.call(パーティクル), 3000);
};

// 画像をレンダリングする Particle.prototype.render = function() {
        //(0,0)から新しいパスを開始します。
        このコンテキストのbeginPath();
        // 曲線の円弧を作成します。this.context.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);
        // 線の幅を描画します this.context.lineWidth = 2;
        // 色の塗りつぶし this.context.fillStyle = this.color;
        // 現在の画像のパスを入力します this.context.fill();
        // 初期点に戻り、初期位置まで線を描画します this.context.closePath();
};

Particle.prototype.swapColor = 関数() {
    // 白を除外 if (this.color != "#FFFFFF") {
        // 左右のインターフェースを決定し、色の値を割り当てる if (this.x < this.w / 2) {
            // 左半分 this.color = "#36fcfa";            
        } それ以外 {
            // 右半分 this.color = "#E5483F";            
        }
        }
    
};

Particle.prototype.move = 関数() {
    // 色の定義 this.swapColor();

    // 水平軸はコサイン角に応じて変換され、乱数によって増幅されます。
    // 2 つの半分の境界が分離されるように偏向角度を設定します this.x += Math.cos(this.a) * this.s;
    this.y += Math.sin(this.a) * this.s;

    // this.y += Math.cos(this.a) * this.s;
    // this.x += Math.sin(this.a) * this.s;
    // 変更後、ランダムな角度を再度取得します。
    this.a += Math.random() * 0.8 - 0.4;

    // すべてが 0 の場合、パーティクルの水平座標は移動しません。
    (this.x < 0 || this.x > this.w - this.radius) の場合 {
      false を返します。
    }
    // 粒子の縦座標は移動しません。
    this.y < 0 || this.y > this.h - this.radius の場合 {
      false を返します。
    }

    // 画像を再描画します this.render();

    true を返します。  
};


キャンバスを document.createElement('キャンバス') にします。
キャンバスの幅 = ウィンドウの内側の幅 - 20;
キャンバスの高さ = ウィンドウの内側の高さ - 30;
document.body.insertBefore(キャンバス、null);
コンテキストを canvas.getContext('2d') にします。

定数conf = {
    頻度: 50,
    x: キャンバスの幅、
    y: キャンバスの高さ
};

粒子を [] とすると、
    頻度 = conf.frequency;

setInterval(関数(){
    ポピュレート();
}.bind(null)、頻度;

関数popolate(){
    粒子.push(
        新しいパーティクル(コンテキスト、{
          x: conf.x / 2、
          y:conf.y/2
        })
    );

    particles.length を返します。
}

関数クリア() {
    コンテキスト.globalAlpha = 0.04;
    コンテキスト.fillStyle = '#000042';
    context.fillRect(0,0,キャンバスの幅、キャンバスの高さ);
    コンテキスト.globalAlpha = 1;
}

関数更新(){
    粒子 = particles.filter(p => p.move());
    クリア();
    アニメーションフレームをリクエストします(引数.callee);
}

アップデート();

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

以下もご興味があるかもしれません:
  • 画像の断片化と再編成のアニメーション効果を実現する JavaScript+html5 キャンバス
  • js キャンバスで星空の背景効果を実現
  • 流星効果を実現する JavaScript キャンバス
  • 数十行のjsを使用してクールなキャンバスインタラクティブ効果を実現する方法を教えます

<<:  Linux の chown コマンドと chmod コマンドの違いの詳細な説明

>>:  Mysql マスタースレーブ同期 Last_IO_Errno:1236 エラー解決

推薦する

WeChatアプレットがフォーム検証を実装

WeChatアプレットフォームの検証、参考までに具体的な内容は次のとおりです。プラグインWxVali...

Vue のデータ応答性に関する詳細な理解

目次1. ES 構文のゲッターとセッター2. ES構文でのdefineProperty 3. Vue...

Dockerコミットの使い方の詳しい説明

場合によっては、ベースイメージに特定の依存関係をインストールする必要があります。Dockerfile...

jQuery はラブエフェクトをクリックする

この記事では、jQueryのクリック時のラブエフェクトの具体的なコードを参考までに共有します。具体的...

Angular Cookie の読み取りおよび書き込み操作コード

Angular Cookie の読み取りおよび書き込み操作のコードは次のようになります。 var a...

Docker イメージの作成、アップロード、プル、およびデプロイ操作 (Alibaba Cloud を使用)

学習プロセス中にプッシュ イメージが常にタイムアウトすることがわかったため、Alibaba Clou...

CSS 疑似要素を使用して複数の連続する要素のスタイルを制御する方法

CSS 疑似要素を使用して要素を制御する場合、一部の要素のスタイルを変更する必要があることがよくあり...

Linux でファイルプレフィックスを一括で追加する方法

フォルダー内のすべての txt ファイルのファイル名の前に「gt_」を追加する必要があります。つまり...

Linux 脆弱性スキャンツール lynis の使用分析

はじめに: Lynis は、徹底的なセキュリティ スキャンを実行できる Unix システム用のセキュ...

nginx クッキーの有効期間に関する議論の要約

訪問するたびにブラウザにCookieが生成されますが、 Cookieの存在はユーザーにとって良いこと...

CSS 命名: BEM、スコープ付き CSS、CSS モジュール、CSS-in-JS の説明

CSS の適用範囲はグローバルです。プロジェクトがどんどん大きくなり、参加する人が増えるにつれて、命...

Dockerを使用してRedisクラスターを構築する方法

目次1. Redis Dockerベースイメージを作成する2. Redisノードイメージを作成する3...

Dockerコンテナのエクスポートとインポートの例

目次DockerコンテナのエクスポートDockerコンテナのインポ​​ートこの記事では主に、コンテナ...

JavaScriptにおけるこのポインティング問題の詳細な説明

序文信じてください。この記事の 7️⃣ ステップを覚えておけば、JS の this リファレンスを完...

ネイティブ JS で音楽プレーヤーを実装するためのサンプル コード

この記事では主に、次のように共有されるネイティブ JS 音楽プレーヤーのサンプル コードを紹介します...