流星効果を実現する JavaScript キャンバス

流星効果を実現する JavaScript キャンバス

この記事では、JavaScriptキャンバスで流星の特殊効果を表示するための具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

1. 透明度変更機能を制御する

関数easeInQuad(curtime,begin,end,duration){
            let x = curtime/duration; //x 値let y = x*x; //y 値return begin+(end-begin)*y; //元の数式を挿入}
        // 平方根で構築されたゆっくりした減速運動のコア機能: x*x + 2*x
関数easeOutQuad(curtime,begin,end,duration){
            let x = curtime/duration; //x 値let y = -x*x + 2*x; //y 値return begin+(end-begin)*y; //元の数式を挿入}
関数easeInoutQuad(curtime,begin,end,duration){
            if(curtime<duration/2){ // 時間の前半 return easyInQuad(curtime,begin,(begin+end)/2,duration/2); // 変更量と時間は2で割られる
            }それ以外{
                let curtime1 = curtime-duration/2; // 時間は前半から減算されることに注意してください。let begin1 = (begin+end)/2; // 初期量は前半で完了した量に加算される必要があります。return easyOutQuad(curtime1,begin1,end,duration/2); // 変更量と時間は 2 で割られます。
            }
}

2. 流星暈の点滅効果

関数 intervalOpcity (cur=0,start=0.3,end=0.8,dur=3) {
            (fadeOpcity(cur、start、end、dur)===end)の場合{
                カーソル = 0
                temp = 開始する
                開始 = 終了 
                終了 = 一時
            }
            opcity = fadeOpcity(cur,start,end,dur) とします。
            色を `rgba(0,0,0,${opcity})` とします
            クリア背景色(ラップ)
            newParticle (ラップ、[x,y],r,色)
            cur = parseFloat(cur + 0.1)
            setTimeout(()=>{intervalOpcity(現在、開始、終了、継続時間)},33)
}

3. 流星の尾

関数 intervalMove (speed,g=0) {
            g===720の場合{
                グラム = 360
            }
            g = g + 速度
            次の位置をmovePosition(a,g,startPosition)とします。
            x = 次の位置[0]
            y = 次の位置[1]
            クリア背景色(ラップ1)
            (i =1;i<=360;i++とします){
                g1 = gi/2とする
                g1<0&&g<=360){
                    壊す
                }
                g1Position = movePosition (a,g1,startPosition) とします。
                新しいパーティクル (wrap1、[g1Position[0]、g1Position[1]]、r/(1+i/5)、`rgba(255,200,200,0.5)`)
            }
            setTimeout(()=>{intervalMove(speed,g)},33)
        }

4. 完全なコード

関数easeInQuad(curtime,begin,end,duration){
            let x = curtime/duration; //x 値let y = x*x; //y 値return begin+(end-begin)*y; //元の数式を挿入}
        // 平方根で構築されたゆっくりした減速運動のコア機能: x*x + 2*x
        関数easeOutQuad(curtime,begin,end,duration){
            let x = curtime/duration; //x 値let y = -x*x + 2*x; //y 値return begin+(end-begin)*y; //元の数式を挿入}
        関数easeInoutQuad(curtime,begin,end,duration){
            if(curtime<duration/2){ // 時間の前半 return easyInQuad(curtime,begin,(begin+end)/2,duration/2); // 変更量と時間は2で割られる
            }それ以外{
                let curtime1 = curtime-duration/2; // 時間は前半から減算されることに注意してください。let begin1 = (begin+end)/2; // 初期量は前半で完了した量に加算される必要があります。return easyOutQuad(curtime1,begin1,end,duration/2); // 変更量と時間は 2 で割られます。
            }
        }
        関数 newCanvas (幅,高さ) {
            bodyEl = document.body とします。
            canvasEl = document.createElement("canvas") とします。
            canvasEl.width = 幅
            canvasEl.height = 高さ
            canvasEl.style.position = "絶対"
            bodyEl.append(キャンバスEl)
            wrap = canvasEl.getContext("2d") とします。
            返品ラップ
        }
        関数setBgcolor(wrap,color){
            wrap.fillStyle=色;
            wrap.fillRect(0,0,wrap.canvas.width,wrap.canvas.height);
        }
        関数 clearBgcolor(wrap){
            wrap.clearRect(0,0,wrap.canvas.width,wrap.canvas.height)
        } 
        関数 newParticle(ラップ、位置、r、色) {
            x = 位置[0]とする
            y = 位置[1]とする
            wrap.fillStyle=色;
            wrap.beginPath();
            wrap.arc(x,y,r,0,2*Math.PI);
            wrap.shadowBlur=20;
            wrap.shadowColor=`rgba(255,255,255,0.8)`;
            wrap.fill();
        }
        関数 fadeOpcity(cur,start,end,dur){
            opcity = parseFloat(easeInoutQuad(cur,start,end,dur).toFixed(2)) とします。 
            返品機会
        }
       wrap0 = newCanvas(1000,800) とします。
       wrap2 = newCanvas(1000,800) とします。
       wrap = newCanvas(1000,800) とします。
       wrap1 = newCanvas(1000,800) とします。
       
        setBgcolor (wrap0、"黒")
        setBgcolor (ラップ、"rgba(0,0,0,0)")
        setBgcolor (wrap1,"rgba(0,0,0,0)")
        setBgcolor (wrap2,"rgba(0,0,0,0)")
        開始位置を[500,200]とします
        r = 10とする
        a = -200とする
        x = a*(1-Math.cos(0))*Math.sin(0)+startPosition[0]とします。
        y = a*(1-Math.cos(0))*Math.cos(0)+startPosition[1]とします。
        関数movePosition(a,g,startPosition){
            t = Math.PI*2/360とします。
            x = a*(1-Math.cos(g*t))*Math.sin(g*t)+startPosition[0]とします。
            y = a*(1-Math.cos(g*t))*Math.cos(g*t)+開始位置[1]とする。
            [x,y]を返す
        }
        関数 intervalMove (speed,g=0) {
            g===720の場合{
                グラム = 360
            }
            g = g + 速度
            次の位置をmovePosition(a,g,startPosition)とします。
            x = 次の位置[0]
            y = 次の位置[1]
            クリア背景色(ラップ1)
            (i =1;i<=360;i++とします){
                g1 = gi/2とする
                g1<0&&g<=360){
                    壊す
                }
                g1Position = movePosition (a,g1,startPosition) とします。
                新しいパーティクル (wrap1、[g1Position[0]、g1Position[1]]、r/(1+i/5)、`rgba(255,200,200,0.5)`)
            }
            setTimeout(()=>{intervalMove(speed,g)},33)
        }

        関数 intervalOpcity (cur=0,start=0.3,end=0.8,dur=3) {
            (fadeOpcity(cur、start、end、dur)===end)の場合{
                カーソル = 0
                temp = 開始する
                開始 = 終了 
                終了 = 一時
            }
            opcity = fadeOpcity(cur,start,end,dur) とします。
            色を `rgba(0,0,0,${opcity})` とします
            クリア背景色(ラップ)
            newParticle (ラップ、[x,y],r,色)
            cur = parseFloat(cur + 0.1)
            setTimeout(()=>{intervalOpcity(現在、開始、終了、継続時間)},33)
        }
間隔機会()
インターバル移動 (1)

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

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

<<:  CentOS6.5にpython3.7をインストールする詳細な手順

>>:  MySQL の組み込み関数 find_in_set を使用した効率的なあいまい検索の詳細な説明

推薦する

現在のMySQL接続数を表示する方法の詳細な説明

1. 現在のすべての接続の詳細情報を表示します。 ./mysqladmin -uadmin -p -...

HTMLの基礎: HTMLの基本構造

HTML ハイパーテキスト ドキュメントの基本構造は、ドキュメント ヘッダーとドキュメント本体の 2...

MySQLデータベースは何をするのか

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...

DockerはGitを使用してJenkinsのリリースとテストプロジェクトの詳細なプロセスを実装します

目次1. Dockerをインストールする2. カスタムネットワークアドレスを作成する3. Docke...

Windows (コミュニティ エディション) に MySQL 8.0.18 をインストールするためのチュートリアル

この記事では、Windows で MySQL をインストールする方法について簡単に説明します。他にご...

MySQL 8.0.20 のインストールと設定の詳細なチュートリアル

この記事では、MySQL 8.0.20のインストールと設定方法についての詳細なチュートリアルを参考ま...

JavaScriptはPromiseを使用して複数の繰り返しリクエストを処理します

1. なぜこの記事を書くのですか?重複リクエストの処理に関する記事をたくさん読んだことがあるでしょう...

モバイル端末におけるビューポートの具体的な使用法についての簡単な説明

目次1. 基本概念1.1 2種類のピクセル1.2 3つのビューポート2. ビューポート設定3. 1回...

Docker データ ストレージ tmpfs マウントの詳細な説明

この記事を読む前に、ボリュームとバインドマウントの基本を理解しておいてください。詳細については、次の...

CentOS 7 に PHP5 用の suPHP をインストールする方法 (Peng Ge)

デフォルトでは、CentOS 7 上の PHP は apache または nobody として実行さ...

CSS3で実装された6つの境界遷移効果

6つの効果実装コードhtml <h1>CSS 境界遷移</h1> <セ...

CentOS 7 でゲートウェイを変更して IP を設定する方法の例

Centos7 バージョンをインストールするときに、外部ネットワークへの接続を選択すると、外部ネット...

Nginx の純粋な構成でリアルタイム ログ レポートを実現するためのアイデアと方法

目次序文実装のアイデア実装手順1. Nginxをコンパイルする2. 設定ファイルは以下のとおりです要...

CSS3+ベジェ曲線でスケーラブルな入力検索ボックス効果を実現

では、早速レンダリングを見てみましょう。 コア コードはtransition: cubic-bezi...