


パーティクルを描画するための数式と組み合わせた HTML5 での Canvas の使用に関するチュートリアル motion_html5 チュートリアル スキル
最近、Web ページを作成し、HTML5 を学習する過程で作成したデモをいくつか並べてコレクションを作成したいと考えています。しかし、Web ページを作成してすべてのデモを 1 つに並べるのはあまりにも醜すぎます。 1つずつ。 Canvas を学習したので、ブラウザをいじって小さなオープニング アニメーションを作成してみようと思いました。
オープニングアニメーションの効果を少し考えた結果、パーティクルの方が楽しいと思い、パーティクルを使用することにしました。私が最初に書いた技術的なブログ投稿は、テキストと画像のパーティクル化に関するものであったことを今でも覚えています。テキストと画像のパーティクル化 その時は、線形モーションのみを実行し、少し 3D 効果を追加しました。練習方法はシンプルです。そこで、このオープニング アニメーションをよりダイナミックなものにしたいと思いました。
まずデモにアクセスしてください: http://2.axescanvas.sinaapp.com/demoHome/index.html
効果は直線運動よりも動的ですか?それはとても簡単です。このブログ投稿のタイトルを忘れないでください。ちょっとした公式ですが、とても楽しいものです。このような効果を実現するために必要なのは中学校です。 。あるいは高校の物理の知識、加速運動と減速運動の公式。つまり、それは実際には小さなドロップ式です。元の投稿者は、仕事では使用しないかもしれませんが、クールなものをいじるのが好きで、その楽しさは本当に魅力的です。さらに、これを行うことで、プログラミング的思考スキルを強化することもできます。
早速、本題に入りましょう。原理を簡単に説明しましょう~~~
パーティクル モーションのコア コードは次のとおりです:
- update:function(time){
- this.x = this.vx*time;
- this.y = this.vy*time;
- if(!this.globleDown&&this.y>0){
- var yc = this.toy - this.y;
- var xc = this.tox - this.x;
- this.jl = Math.sqrt(xc*xc yc*yc);
- var za = 20;
- var ax = za*(xc/this.jl),
- ay = za*(yc/this.jl),
- vx = (this.vx ax*time)*0.97,
- vy = (this.vy ay*time)*0.97;
- this.vx = vx;
- this.vy = vy;
- }else {
- var 重力 = 9.8;
- var vy = this.vy 重力*時間;
- if(this.y>canvas.height){
- vy = -vy*0.7;
- }
- this.vy =
- }、
- var Dot = function(x,y,vx,vy,tox,toy,color){
- これ.x=x;
- これ.y=y; この
- .vx=vx; これ
- .vy=vy; これ
- .nextox = tox; これ .nextoy = おもちゃ;
- この.color = color;
- this.visible = true ;
- this.globleDown = false;
- this.setEnd(tox, おもちゃ); }
- setEnd:function(tox, toy){
- .y; .x;
- }、
-
x と y は粒子の位置、vx は粒子の水平方向の速度、vy は粒子の垂直方向の速度です。 nexttox などを知っているかどうかは関係ありません。これらは単なる一時的な変数です。 。 tox および toy はパーティクルの宛先位置です。
まず、すべてのパーティクルに目的地を与えます。これについては以下で説明します。つまり、粒子をその場所に到達させたい場合は、変数 za を加速度として定義し、さらにテストを行うことでおおよそのパラメーターを取得します。それはほぼ同じように感じます。 za は粒子と目的地の間の線の加速度であるため、この段落
では、粒子の位置と目的地の位置を通じて粒子の水平加速度と垂直加速度を計算できます。JavaScript コードコンテンツをクリップボードにコピーします- var ax = za*(xc/this.jl),
- ay = za*(yc/this.jl),
水平加速度と垂直加速度を取得した後、次のステップはさらに簡単です。水平速度と垂直速度の増分を直接計算し、それによって水平速度と垂直速度の値を変更します。
XML/HTML コードコンテンツをクリップボードにコピー- vx = (this.vx ax*time)*0.97,
- vy = (this.vy ay*time)*0.97;
速度を計算したら、パーティクルの位置を更新するだけです。
XML/HTML コードコンテンツをクリップボードにコピー- this.x = this.vx*time this.y = this.vy*time
これが運動の原理です、とても簡単ですね。
動きの原理について説明したので、次は上記のアニメーションの具体的な実装について説明します。アニメーションの初期化、オフスクリーン キャンバス上で目的の文字や絵を描画し、オフスクリーン キャンバスのピクセルを取得します。 getImageData メソッドによる画面キャンバス。次に、ループを使用してオフスクリーン キャンバス内の描画領域を見つけます。imageData のデータ値は rgba 配列であるため、最後の値、つまり透明度が 128 より大きい場合、その領域が描画されたことを意味すると判断します。描かれた。次に、領域の xy 値を取得します。パーティクル オブジェクトが多すぎるとページ ラグが発生するのを防ぐため、ピクセルを取得するたびにパーティクルの数を制限し、x 値と y 値を 2 ずつ増やします。粒子。
XML/HTML コードコンテンツをクリップボードにコピー- this.osCanvas = ドキュメント.createElement("canvas");
- var osCtx = this.osCanvas.getContext("2d");
- this.osCanvas.width = 1000;
- this.osCanvas.height = 150;
- osCtx.textAlign = "センター";
- osCtx.textBaseline = "中";
- osCtx.font="70px 微软雅黑,黑体 bold";
- osCtx.fillStyle = "#1D181F"
- osCtx.fillText("ようこそ", this.osCanvas.width/2, this.osCanvas.height/2-40);
- osCtx.fillText("wAxesのHOMEへ", this.osCanvas.width/2, this.osCanvas.height/2 40);
- var bigImageData = osCtx.getImageData(0,0,this.osCanvas.width,this.osCanvas 。身長);
- ドット = [];
- for(var x=0;x<bigImageData.width;x =2){
- for(var y=0;y<bigImageData.height;y =2){
- var i = (y*bigImageData.width x)*4;
- if(bigImageData.data[i 3]>128){
- var ドット = 新しい ドット(
- Math.random()>0.5?Math.random()*20 10:Math.random()*20 Canvas.width-40,
- -Math.random()*canvas.height*2,
- 0、
- 0、
- x (canvas.width/2-this.osCanvas.width/2),
- y (canvas.height/2-this.osCanvas.height/2),
- 「rgba(" bigImageData.data[i] "," bigImageData.data[i 1] "," bigImageData.data[i 2] ",1)」
- );
- dot.setEnd(canvas.width/2,canvas.height/2)
- dots.push(dot);
- }
- }
- }
循環によってパーティクルの位置 xy 値を取得した後、その位置がパーティクルの目的となります。その後、アニメーションが開始され、文字画像のパーティクル化の効果が得られます。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











これは、HTML でのネストされたテーブルのガイドです。ここでは、テーブル内にテーブルを作成する方法をそれぞれの例とともに説明します。

HTML の表の境界線に関するガイド。ここでは、HTML でのテーブルの境界線の例を示しながら、テーブル境界線を定義する複数の方法について説明します。

HTML マージン左のガイド。ここでは、HTML margin-left の概要とその例、およびそのコード実装について説明します。

HTML テーブル レイアウトのガイド。ここでは、HTML テーブル レイアウトの値と例および出力について詳しく説明します。

HTML でのテキストの移動に関するガイド。ここでは、概要、マーキー タグが構文でどのように機能するか、および実装例について説明します。

HTML 入力プレースホルダーのガイド。ここでは、コードと出力とともに HTML 入力プレースホルダーの例について説明します。

HTML オンクリック ボタンのガイド。ここでは、それらの紹介、動作、例、およびさまざまなイベントでの onclick イベントについてそれぞれ説明します。
