この記事では、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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: CentOS6.5にpython3.7をインストールする詳細な手順
>>: MySQL の組み込み関数 find_in_set を使用した効率的なあいまい検索の詳細な説明
CSS を使用するだけで、コーナーカット + ボーダー + 投影 + コンテンツの背景色のグラデーシ...
環境変数の設定の簡単な説明プログラムは、環境によって異なる環境変数を必要とします。たとえば、実稼働環...
目次序文1. セレンとは何ですか? 2. 使用手順1. ライブラリをインポートする2. テストコード...
まず、ページにビデオを埋め込むための HTML コードは次のとおりです。コードをコピーコードは次のと...
序文最近、仕事で、MySQL ユーザーの権限を変更するには、特定の IP アドレスへのアクセスを制限...
この記事では、MySQL 8.0.20 winx64 のインストールと設定方法を次のように説明します...
デバッグブランチプロジェクトの通常の開発中に、以前にリリースされたバージョンにバグがある場合がありま...
nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバー、メール プ...
ミニネットMininet は軽量のソフトウェア定義ネットワークおよびテスト プラットフォームです。軽...
ウェブサーバー1. Webサーバーは、wev、cgi、asp機能を無効にするなど、不要なIISコンポ...
この記事では、タブバーの切り替え効果を簡単に実現するためのJavaScriptの具体的なコードを参考...
この記事では、CentOS 7.4 サーバーで時刻同期を構成する方法について説明します。ご参考までに...
1. ノードサーバーのセットアップ + データベース接続ここでの操作は比較的簡単でわかりやすいです。...
目次導入アイデアID配列インデックスのマッピング関係を確立するツリー構造の構築原理要約する導入組織階...
目次プラン依存関係をインストールする依存関係の導入pxをremに変換するFlexible.jsを変更...