流星効果を実現する 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 を使用した効率的なあいまい検索の詳細な説明

推薦する

CSSはコーナーカット+ボーダー+投影+コンテンツ背景色のグラデーション効果を実現します

CSS を使用するだけで、コーナーカット + ボーダー + 投影 + コンテンツの背景色のグラデーシ...

Nest.js 環境変数の設定とシリアル化の詳細な説明

環境変数の設定の簡単な説明プログラムは、環境によって異なる環境変数を必要とします。たとえば、実稼働環...

Linux システムでの Selenium クローラー プログラムの導入の概要

目次序文1. セレンとは何ですか? 2. 使用手順1. ライブラリをインポートする2. テストコード...

HTMLページ埋め込み動画とJSコントロール切り替え動画例の詳しい説明

まず、ページにビデオを埋め込むための HTML コードは次のとおりです。コードをコピーコードは次のと...

MySQLアカウントのIP制限条件を変更する方法

序文最近、仕事で、MySQL ユーザーの権限を変更するには、特定の IP アドレスへのアクセスを制限...

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

この記事では、MySQL 8.0.20 winx64 のインストールと設定方法を次のように説明します...

Git サーバーを使用してデバッグ ブランチを表示し、修正する方法を 1 日 1 分で学習します。

デバッグブランチプロジェクトの通常の開発中に、以前にリリースされたバージョンにバグがある場合がありま...

Linux システムでの nginx サーバーのインストールと負荷分散構成の詳細な説明

nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバー、メール プ...

Ubuntu 16.04 にソースコードから Mininet をインストールする

ミニネットMininet は軽量のソフトウェア定義ネットワークおよびテスト プラットフォームです。軽...

Windows サーバー管理におけるセキュリティの考慮事項

ウェブサーバー1. Webサーバーは、wev、cgi、asp機能を無効にするなど、不要なIISコンポ...

シンプルなタブバー切り替えケースを実現するJavaScript

この記事では、タブバーの切り替え効果を簡単に実現するためのJavaScriptの具体的なコードを参考...

Centos 7.4 サーバーの時刻同期設定方法 [NTP サービスに基づく]

この記事では、CentOS 7.4 サーバーで時刻同期を構成する方法について説明します。ご参考までに...

Node の SMS API で検証コード ログインを実装するためのサンプル コード

1. ノードサーバーのセットアップ + データベース接続ここでの操作は比較的簡単でわかりやすいです。...

JavaScript でツリー構造を構築するための効率的なアルゴリズムについての簡単な説明

目次導入アイデアID配列インデックスのマッピング関係を確立するツリー構造の構築原理要約する導入組織階...

Vue で PC 解像度の適応を実装するためのサンプルコード

目次プラン依存関係をインストールする依存関係の導入pxをremに変換するFlexible.jsを変更...