jsを使用して動的な背景を実現する

jsを使用して動的な背景を実現する

この記事の例では、動的な背景を実現するためのjsの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

1. 次のコードをコピーしてjsファイルとして保存します。

window.onload = 関数(){
    // デフォルト値 8px->0px から本体の余白を定義します
    ドキュメントのbodyスタイルにマージンを付ける
    ドキュメントのスタイルの背景 = "#30333F";
    //キャンバスを作成します document.body.appendChild(document.createElement('canvas'));
    var キャンバス = document.querySelector('キャンバス'),
        ctx = canvas.getContext('2d') //ctxはキャンバスに描画するためのAPI/DOMを返します
    キャンバスの幅 = ウィンドウの内側の幅;
    キャンバスの高さ = ウィンドウの内側の高さ;
    canvas.style.position = '固定';
    ctx.lineWidth = .3;
    ctx.strokeStyle = (新しいColor(150)).style;
    //マウスの有効範囲を定義する var mousePosition = {
        x: 30 * キャンバス幅 / 100,
        y: 30 * キャンバスの高さ / 100
    };
    var ドット = {
        nb: 1000, //ドットの総数 距離: 50,
        d_半径: 100,
        配列: []
    };
    //カラークラスを作成します。カラークラスは文字列型 rgba を返します (*,*,*,.8)
    関数 mixComponents(comp1, weight1, comp2, weight2) {
        (comp1 * weight1 + comp2 * weight2) / (weight1 + weight2) を返します。
    }
    関数 averageColorStyles(dot1, dot2) {
        var color1 = dot1.color,
            ドットの色を変更する

        var r = mixComponents(color1.r, dot1.radius, color2.r, dot2.radius),
            g = mixComponents(color1.g、dot1.radius、color2.g、dot2.radius)、
            b = mixComponents(color1.b、dot1.radius、color2.b、dot2.radius);
        createColorStyle(Math.floor(r), Math.floor(g), Math.floor(b)) を返します。
    }
    関数 colorValue(min) {
        Math.floor(Math.random() * 255 + min) を返します。
    }
    関数createColorStyle(r, g, b) {
        'rgba(' + r + ',' + g + ',' + b + ', 0.8)' を返します。
    }
    関数Color(min){
        最小値 = 最小値 || 0;
        this.r = colorValue(最小値);
        this.g = colorValue(最小値);
        this.b = colorValue(最小値);
        this.style = createColorStyle(this.r、this.g、this.b);
    }
    //Dotクラスと一連のメソッドを作成する function Dot() {
        this.x = Math.random() * キャンバスの幅;
        this.y = Math.random() * キャンバスの高さ;

        this.vx = -.5 + Math.random();
        this.vy = -.5 + Math.random();

        this.radius = Math.random() * 2;

        this.color = 新しい Color();
    }

    ドットプロトタイプ = {
        描画: 関数 () {
            ctx.beginPath();
            ctx.fillStyle = this.color.style;
            ctx.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false);
            ctx.fill();
        }
    };
    function moveDots() { //Dotオブジェクトの移動 for (i = 0; i < dots.nb; i++) {

            var dot = dots.array[i];

            dot.y < 0 || dot.y > canvas.height) の場合 {
                ドットvx = ドットvx;
                ドット.vy = - ドット.vy;
            }
            そうでない場合 (dot.x < 0 || dot.x > canvas.width) {
                ドットvx = - ドットvx;
                ドットvy = ドットvy;
            }
            ドットx + = ドットvx;
            ドットy + = ドットvy;
        }
    }
    function connectDots() { //DOtオブジェクトの接続 for (i = 0; i < dots.nb; i++) {
            (j = i; j < dots.nb; j++) の場合 {
                i_dot = ドット配列[i];
                j_dot = ドット配列[j];

                if ((i_dot.x - j_dot.x) < dots.distance && (i_dot.y - j_dot.y) < dots.distance && (i_dot.x - j_dot.x) > - dots.distance && (i_dot.y - j_dot.y) > - dots.distance) {
                    if ((i_dot.x - mousePosition.x) < dots.d_radius && (i_dot.y - mousePosition.y) < dots.d_radius && (i_dot.x - mousePosition.x) > - dots.d_radius && (i_dot.y - mousePosition.y) > - dots.d_radius) {
                        ctx.beginPath();
                        ctx.strokeStyle = averageColorStyles(i_dot, j_dot);
                        ctx.moveTo(i_dot.x, i_dot.y);
                        ctx.lineTo(j_dot.x, j_dot.y);
                        ctx.stroke();//定義されたルートを描画します ctx.closePath();//現在のポイントから開始ポイントに戻るパスを作成します}
                }
            }
        }
    }
    function createDots(){//nb 個の Dot オブジェクトを作成する for (i = 0; i < dots.nb; i++) {
            dots.array.push(新しいDot());
        }
    }
    function drawDots() { //Dotプロトタイプチェーンを参照し、drawメソッドを使用して、キャンバスにDotオブジェクトを描画します for (i = 0; i < dots.nb; i++) {
            var dot = dots.array[i];
            ドットを描画します。
        }
    }
    関数animateDots() {
        ctx.clearRect(0, 0, canvas.width, canvas.height); //キャンバスをクリアします。そうしないと、線が接続されます。moveDots();
        接続ドット();
        ドットを描画します。
        アニメーションフレームをリクエストします(ドットをアニメートします);
    }
    createDots(); //Dot クラス関数の作成に使用します requestAnimationFrame(animateDots); //キャンバス独自の 60Hz リフレッシュ画面キャンバス メソッドを使用します document.querySelector('canvas').addEventListener('mousemove', function (e) {
        マウスの位置.x = e.pageX;
        マウスの位置.y = e.pageY;
    })

    document.querySelector('canvas').addEventListener('mouseleave', function (e) { //マウスが離れると、接続は自動的にキャンバスの中央に戻ります。mousePosition.x = canvas.width / 2;
        マウスの位置.y = キャンバスの高さ / 2;
    })

}

2. 次に、動的背景を使用する必要があるHTMLページにjsファイルをインポートします。

効果は以下のとおりです。

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

以下もご興味があるかもしれません:
  • JS キャンバスはマトリックスの背景効果を動的に実現します
  • JSはダイナミックな星空背景効果を実現します
  • JS は Web ページ本体の背景色を動的に変更します。サンプルコード
  • Particles.js をベースにした超クールなパーティクルダイナミック背景エフェクトを作成する (Zhihu を模倣)
  • JavaScript を使用して背景色を動的に変更する方法
  • JavaScriptで生成される動的な雨の背景効果を実現する方法
  • マウスが選択されたときにウェブページの背景色を動的に変更する JS コード

<<:  CSS3 グラデーション背景の互換性の問題

>>:  Sparkの紹介とHadoopとの比較

推薦する

Linux 環境で crontab コマンドを使用して、スケジュールされた定期的な実行タスクを設定します (PHP 実行コードを含む)

この記事では、Linux 環境で crontab コマンドを使用して、タスクの定期的な実行をスケジュ...

vue3+vite プロジェクトで svg を使用する方法の詳細なグラフィック説明

今日、vue3+viteプロジェクトの実践で、svgを使用する場合、以前の記述方法が使用できないこと...

HTML Selectは、デフォルトの選択を設定するためにselected属性を使用します。

オプションに属性 selected = "selected" を追加すると、それ...

SpringBoot プロジェクトの Docker 環境を実行するときに発生する無限再起動問題の詳細な説明

もしかしたら私の考え方が間違っていたのかもしれないし、問題の説明が少し乱雑だったのかもしれないが、こ...

CSS を使用して複数の方法で等高レイアウトを実装するサンプル コード

この記事で説明する等高レイアウトでは、純粋な CSS を使用して、要素の高さを手動で設定することなく...

Linux ファイルディレクトリ管理コマンドの概要

タッチコマンドこれには 2 つの機能があります。1 つは、既存のファイルの時間タグを現在のシステム時...

Linux 上で Python3.6 をコンパイルしてインストールするための詳細なチュートリアル

1. まず、公式ウェブサイト https://www.python.org/downloads/so...

MySQL監視グループレプリケーションについて簡単に説明します

元のテキスト: https://dev.mysql.com/doc/refman/8.0/en/gr...

CSS flex 複数列レイアウト

基本的な3列レイアウト 。容器{ ディスプレイ: フレックス; 幅: 500ピクセル; 高さ: 20...

Tomcatのクラスロードメカニズムのプロセスとソースコード分析

目次序文1. Tomcat クラスローダー構造図: 2. Tomcat のクラスロードプロセスの説明...

Vue カプセル化に基づくプルダウン更新およびプルアップ読み込みコンポーネント

VueとネイティブJavaScriptカプセル化に基づいて、プルダウンリフレッシュとプルアップロード...

mysql replace into の使用法の詳細な説明

replace ステートメントは、一般的に insert ステートメントに似ています。ただし、テーブ...

Linux における $ 記号の基本的な使い方のまとめ

Linuxバージョン: CentOS 7 [root@azfdbdfsdf230lqdg1ba91 ...

web.config (IIS) および .htaccess (Apache) の構成

xml <?xml バージョン="1.0" エンコーディング="...

Linux C++ マルチスレッド同期の非常に詳細な説明

目次1. ミューテックス1. ミューテックスの初期化2. ミューテックスロックの関連特性と分類3. ...