この記事では主に雪片が落ちる特殊効果を実現するための HTML5 キャンバスを詳しく紹介します。この効果は魅力的でリアルなアニメーション効果を実現します。興味のある方は参考にしてください。
落下の効果を示す表示をインターネット上でたくさん見てきました。 HTML5 のスノーフレークは、確かに非常に魅力的です。皆さんも私と同じように興奮しており、コードの実装方法を研究したいと考えていると思います。ただし、これらのソース コードはさまざまな場所からダウンロードできます。そのようなアニメーションを作成するときに他の人がどのようなアイデアや考えを持っているかを分析します。
私は最近たまたまよく勉強していて、時間を利用して需要分析、知識ポイント、プログラミングから段階的に分析しました。笑わない。
最終的なレンダリングは次のとおりです:
図 1
1. 円形の雪の結晶
この例では、雪の結晶の形状は円形です 2。雪の結晶は固定されています 画像によると 1. 降る過程で、画像全体の雪の結晶の数を注意深く観察します。この要件は、観察と分析を通じて取得する必要があります。これは、私たちが実際に見る、空一面に雪が舞う光景と一致しています。 3. 雪の結晶のサイズは一定ではありません 各雪の結晶のサイズは異なるため、雪の結晶の半径はランダムになります。これは、現実の空に雪の結晶が飛んでいるのを見るシーンとも一致します。 4. 雪の結晶の位置が移動します雪の結晶が降ってくると、当然その位置も移動します。2. 知識のポイント
1. Html5 Canvas+JavaScript を使用して円を描画します - 円形の雪の結晶を形成します
Html5 では、円を描くために Canvas と JavaScript を使用して円弧を形成する必要があります(x ,y,r,start,stop);2. 乱数 - 異なる半径と座標を持つ円形の雪の結晶を生成しますこの例では、Web ページが初めて読み込まれるときに、特定の数の雪の結晶が生成されます。異なる半径と位置を生成する必要があるため、半径と座標は乱数になります。雪の結晶の落下過程では、半径は変化せず、座標は一定の範囲内で変化するため、この時点では座標も乱数になります。 Math.random()3. プログラミング
1. 準備
キャンバスを置き、全体の背景色を黒に設定します
HTMLコード:<canvas id="mycanvas"> 您的浏览器不支持canvas画布 </canvas>CSSコード:
* { margin: 0; padding: 0; } #mycanvas { background: black; }効果は次のとおりです:
注: キャンバス デフォルトでは、初期化の高さと幅があるため、心配する必要はありません
2. キャンバスは全画面で表示されます
コードは次のとおりです:
//获取mycanvas画布 var can = document.getElementById("mycanvas"); var ctx = can.getContext("2d"); //画布宽度 var wid = window.innerWidth; //画布高度 var hei = window.innerHeight; can.width=wid; can.height=hei;このときの効果は次のとおりです:
3. 初期化の生成 雪片の固定数
上記の需要分析と知識ポイントの解釈によれば、まず、雪の結晶の数は固定されているため、変数 var Snow = 100 を定義する必要があります。ここでは雪の結晶の数が 100 であると仮定します。オブジェクトの場合、このオブジェクトのプロパティには半径、座標 (X, Y) が含まれます。雪の結晶オブジェクトは var SnowOject={x:1, y:10,r:5} として記述できます。ここでは円形を表します。座標 (1,10) と半径 5 のスノーフレーク。この例では、半径と座標は乱数であるため、Math.random() を使用してそれぞれ半径と座標 (X, Y) を生成します。 ;
ここには 100 個の雪片があるため、後続の操作を容易にするために、配列を使用してこれら 100 個の雪片オブジェクトを保存します。 JavaScript コードは次のとおりです://雪花数目 var snow = 100; //雪花坐标、半径 var arr = []; //保存各圆坐标及半径 for (var i = 0; i < snow; i++) { arr.push({ x: Math.random() * wid, y: Math.random() * hei, r: Math.random() * 10 + 1 }) }
4. 雪の結晶の描画
上記では、100 個の雪の結晶の半径と座標 (X, Y) を生成しました。以下は、ループ内でキャンバスを使用して雪の結晶を描画する方法です (ここでは、円を描く)、ここで関数を定義しますJavaScript コードは次のとおりです:
//画雪花 function DrawSnow() { ctx.fillStyle="white"; ctx.beginPath(); for (var i = 0; i < snow; i++) { var p = arr[i]; ctx.moveTo(p.x,p.y); ctx.arc(p.x,p.y,p.r,0,2*Math.PI,false); } ctx.fill(); ctx.closePath();次に DrawSnow() 関数を呼び出すと、効果は次のようになります:
Web ページを複数回更新して確認してください。異なるサイズと位置の雪の結晶が生成される場合 (通常は [はい])、これを実行すると最終的な効果に近づきます
注: ここでは 100 個の円を描画する必要があるため、描画開始座標は描画開始座標が再定義されるたびに再定義されます。円が描画されます: ctx.moveTo(p.x,p.y); それ以外の場合は、そのようになります 奇妙な効果がある場合は、信じられない場合は試してみてください
5. 雪の結晶がひらひらしています
100個の雪の結晶を描きました残念ながら、変化する効果は Web ページを更新することによってのみ確認できますが、達成する必要があるのは、雪片の移動が停止しないことです。まず、setInterval 関数を使用して雪片を継続的に再描画する必要があります。ここでの間隔は 50 ミリ秒です: setInterval(DrawSnow,50);
同时每一朵雪花的坐标(X、Y)需要不停的改变(在一定幅度内),我们这里的雪花是从左上方飘落到右下方,所以每朵X、Y坐标值都在不停的增大,那我们用一个函数SnowFall()定义雪花飘过规则
该函数代码如下:
//雪花飘落 function SnowFall() { for (var i = 0; i < snow; i++) { var p = arr[i]; p.y += Math.random() * 2 + 1; if (p.y > hei) { p.y = 0; } p.x += Math.random() * 2 + 1; if (p.x > wid) { p.x = 0; <span style="white-space:pre"> </span>} } }
然后将该函数放入DrawSnow()执行,注意:我们每隔50毫毛重画雪花,必须擦除画布,所以DrawSnow()函数体内必须在前面执行clearRect()函数,即:ctx.clearRect(0, 0, wid, hei);
此时DrawSnow函数定义如下:
//画雪花 function DrawSnow() { ctx.clearRect(0, 0, wid, hei); ctx.fillStyle = "white"; ctx.beginPath(); for (var i = 0; i < snow; i++) { var p = arr[i]; ctx.moveTo(p.x, p.y); ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false); } ctx.fill(); SnowFall(); ctx.closePath(); }
最后执行setInterval(DrawSnow, 50);
OK,经过我们上述步骤,小伙伴们是否已经对整个过程及技术实现很清晰了。
完整代码如下(大家可以直接复制到自己项目中执行,测试下效果):
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.8.3.min.js"></script> <style type="text/css"> * { margin: 0; padding: 0; } #mycanvas { background: black; } </style> </head> <body> <canvas id="mycanvas"> 您的浏览器不支持canvas画布 </canvas> <script> //获取mycanvas画布 var can = document.getElementById("mycanvas"); var ctx = can.getContext("2d"); //画布宽度 var wid = window.innerWidth; //画布高度 var hei = window.innerHeight; can.width = wid; can.height = hei; //雪花数目 var snow = 100; //雪花坐标、半径 var arr = []; //保存各圆坐标及半径 for (var i = 0; i < snow; i++) { arr.push({ x: Math.random() * wid, y: Math.random() * hei, r: Math.random() * 10 + 1 }) } //画雪花 function DrawSnow() { ctx.clearRect(0, 0, wid, hei); ctx.fillStyle = "white"; ctx.beginPath(); for (var i = 0; i < snow; i++) { var p = arr[i]; ctx.moveTo(p.x, p.y); ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false); } ctx.fill(); SnowFall(); ctx.closePath(); } //雪花飘落 function SnowFall() { for (var i = 0; i < snow; i++) { var p = arr[i]; p.y += Math.random() * 2 + 1; if (p.y > hei) { p.y = 0; } p.x += Math.random() * 2 + 1; if (p.x > wid) { p.x = 0; } } } setInterval(DrawSnow, 50); </script> </body> </html>
好了,今天分享就到这里,希望对大家的学习有所帮助。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
以上がHTML5 キャンバスを使用して雪の結晶を降らせる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

H5とHTML5は異なる概念です。HTML5は、新しい要素とAPIを含むHTMLのバージョンです。 H5は、HTML5に基づくモバイルアプリケーション開発フレームワークです。 HTML5はブラウザを介してコードを解析およびレンダリングしますが、H5アプリケーションはコンテナを実行し、JavaScriptを介してネイティブコードと対話する必要があります。

HTML5の重要な要素には、最新のWebページの構築に使用される、、,,,,などが含まれます。 1.ヘッドコンテンツを定義します。2。リンクをナビゲートするために使用されます。3。独立した記事のコンテンツを表します。4。ページコンテンツを整理します。5。サイドバーコンテンツを表示します。

HTML5とHTML5の略語であるHTML5とH5の間に違いはありません。 1.HTML5はHTMLの5番目のバージョンであり、Webページのマルチメディア関数とインタラクティブ機能を強化します。 2.H5は、HTML5ベースのモバイルWebページまたはアプリケーションを参照するためによく使用され、さまざまなモバイルデバイスに適しています。

HTML5は、W3Cによって標準化されたHyperText Markup言語の最新バージョンです。 HTML5は、新しいセマンティックタグ、マルチメディアサポート、フォームの強化、Web構造の改善、ユーザーエクスペリエンス、SEO効果を導入します。 HTML5は、Webページ構造をより明確にし、SEO効果をより良くするために、、、、、、などの新しいセマンティックタグを導入します。 HTML5はマルチメディア要素をサポートしており、サードパーティのプラグインは不要で、ユーザーエクスペリエンスと読み込み速度が向上します。 HTML5はフォーム関数を強化し、ユーザーエクスペリエンスを向上させ、フォーム検証効率を向上させるなどの新しい入力タイプを導入します。

クリーンで効率的なHTML5コードを書き込む方法は?答えは、タグのセマンティック、構造化されたコード、パフォーマンスの最適化、一般的な間違いを回避することにより、一般的な間違いを避けることです。 1.コードの読みやすさとSEO効果を改善するには、セマンティックタグなどを使用します。 2。適切なインデントとコメントを使用して、コードを構造化して読みやすいままにします。 3.不必要なタグを減らし、CDNを使用してコードを圧縮することにより、パフォーマンスを最適化します。 4.タグが閉じていないなどの一般的な間違いを避け、コードの有効性を確認してください。

H5は、マルチメディアサポート、オフラインストレージ、パフォーマンスの最適化により、Webユーザーエクスペリエンスを向上させます。 1)マルチメディアサポート:H5と要素は、開発を簡素化し、ユーザーエクスペリエンスを向上させます。 2)オフラインストレージ:WebStorageとIndexEdDBは、エクスペリエンスを改善するためにオフラインで使用できるようにします。 3)パフォーマンスの最適化:ウェブワーカーと要素は、パフォーマンスを最適化して帯域幅の消費を削減します。

HTML5コードは、タグ、要素、属性で構成されています。1。タグはコンテンツタイプを定義し、などの角度ブラケットに囲まれています。 2。要素は、startタグ、内容、および内容などのエンドタグで構成されています。 3。属性は、開始タグのキー値のペアを定義し、ような関数を強化します。これらは、Web構造を構築するための基本ユニットです。

HTML5は、最新のWebページを構築するための重要なテクノロジーであり、多くの新しい要素と機能を提供します。 1。HTML5は、Webページの構造とSEOを強化するなどのセマンティック要素を導入します。 2。プラグインなしのマルチメディア要素と埋め込みメディアをサポートします。 3.フォームは、新しい入力タイプと検証プロパティを強化し、検証プロセスを簡素化します。 4.オフラインおよびローカルストレージ機能を提供して、Webページのパフォーマンスとユーザーエクスペリエンスを向上させます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1
使いやすく無料のコードエディター

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
