サンプルチュートリアル HTML5 Canvas 超クールな花火が咲くアニメーション実装 code_html5 チュートリアル スキル
これはクールな HTML5 キャンバス アニメーションです。実際の生活に咲いている花火の特殊効果をシミュレートします。その効果は非常にリアルですが、結局のところ、ガール フレンドを連れて行っても、それはコンピューターのシミュレーションです。それは、まだ効果が少し悪いです。この HTML5 Canvas アニメーションの優れた点の 1 つは、花火をたくさん打ち上げても、Chrome 上では基本的に遅延が発生しないことです。
この HTML5 花火特殊効果を実装するプロセスとコードを簡単に分析してみましょう。これは主に HTML コード、CSS コード、JavaScript コードで構成されています。もちろん、最も重要なのは JavaScript コードです。
HTML コード:
- <div id=”gui”>div>
- <div id=”canvas-container”> <div id=”mountains2″>div>
- <div id=”mountains1″ >div><div id=”スカイライン”>div> div>
HTML の構造は非常に単純です。つまり、Canvas コンテナーが構築され、JS を使用してこのコンテナー内に Canvas オブジェクトを生成します。最終的な JS コードを見ればわかります。
CSSコード:
- #canvas-container { background: #000 url(bg.jpg); 高さ: 400px; 左: 50%; マージン: -200px 0 0 -300px; 位置: 絶対; トップ: 50%; 幅: 600px; z-index: 2;
- } キャンバス { カーソル: クロスヘア; 表示: ブロック; 位置: 相対; z-index: 3;
- } canvas:active { カーソル: クロスヘア;
- } #skyline { 背景: url (skyline.png) 繰り返し-x 50% 0; 下下: 0; 高さ: 135px; 左: 0; 位置: 絶対; 幅: 100%; z-index: 1;
- } #mountains1 { 背景: url (mountains1.png) 繰り返し-x 40% 0; 下下: 0; 高さ: 200px; 左: 0; 位置: 絶対; 幅: 100%; z-index: 1;
- } #mountains2 { 背景: url (mountains2.png) 繰り返し-x 30% 0; 下下: 0; 高さ: 250px; 左: 0; 位置: 絶対; 幅: 100%; z-index: 1;
- } #gui { 右右: 0; 位置: 固定; トップ: 0; z-index: 3;
- }
CSS コードは特別なものではなく、主に背景色と境界線を定義します。
次は最も重要な Javascript コードです。
JavaScript コード:
- self.init = 関数(){
- self.dt = 0;
- self.oldTime = Date.now();
- self.canvas = document.createElement('canvas');
- self.canvasContainer = $('#canvas-container'); var canvasContainerDisabled = document.getElementById('canvas-container');
- self.canvas.onselectstart = function() { return false;
- };
- self.canvas.width = self.cw = 600;
- self.canvas.height = self.ch = 400;
- self.particles = [];
- self.partCount = 30;
- self.fireworks = [];
- self.mx = self.cw/2;
- self.my = self.ch/2;
- self.currentHue = 170;
- self.partSpeed = 5;
- self.partSpeedVariance = 10;
- self.partWind = 50;
- self.partFriction = 5;
- self.partGravity = 1;
- self.hueMin = 150;
- self.hueMax = 200;
- self.fworkSpeed = 2;
- self.fworkAccel = 4;
- self.hueVariance = 30;
- self.flickerDensity = 20;
- self.showShockwave = false;
- self.showTarget = true;
- self.clearAlpha = 25;
- self.canvasContainer.append(self.canvas);
- self.ctx = self.canvas.getContext('2d');
- self.ctx.lineCap = 'round';
- self.ctx.lineJoin = 'round';
- self.lineWidth = 1;
- self.bindEvents();
- self.canvasLoop();
- self.canvas.onselectstart = function() { return false;
- };
- };
この JS コードは、主に Canvas コンテナー内に Canvas オブジェクトを構築し、Canvas オブジェクトの外観とアニメーションのプロパティを初期化します。
- var Particle = function(x, y, hue){ this.x = x; これ.y = y; this.coordLast = [
- {x: x, y: y}、
- {x: x, y: y}、
- {x: x, y: y}
- ]; this.angle = rand(0, 360); this.speed = rand(((self.partSpeed - self.partSpeedVariance) this.friction = 1 - self.partFriction/100; this.gravity = self.partGravity/2; this.hue = rand(hue-self.hueVariance, hue self.hueVariance); this.brightness = rand(50, 80); この.alpha = rand(40,100)/100; this.decay = rand(10, 50)/1000; this.wind = (rand(0, self.partWind) - (self.partWind/2))/25; この.lineWidth = self.lineWidth;
- };
- Particle.prototype.update = 関数(インデックス){ var ラジアン = this.angle * Math.PI / 180; var vx = Math.cos(ラジアン) * this.speed; var vy = Math.sin(ラジアン) * this.speed this 。重力; this.speed *= this.friction; this.coordLast[2].x = this.coordLast[1].x; this.coordLast[2].y = this.coordLast[1].y; this.coordLast[1].x = this.coordLast[0].x; this.coordLast[1].y = this.coordLast[0].y; this.coordLast[0].x = this.x; this.coordLast[0].y = this.y; this.x = vx * self.dt; this.y = vy * self.dt; this.angle = this.wind; this.alpha -= this.decay; if(!hitTest(0,0,self.cw,self.ch,this.x-this.radius, this.y-this.radius, this .radius*2, this.radius*2) || this.alpha < ){
- self.particles.splice(index, 1);
- }
- };
- Particle.prototype.draw = function(){ var coordRand = (rand(1,3) -1);
- self.ctx.beginPath();
- self.ctx.moveTo(Math.round(this.coordLast[coordRand].x), Math.round(this.coordLast[coordRand].y));
- self.ctx.lineTo(Math.round(this.x), Math.round(this .y));
- self.ctx.closePath();
- self.ctx.ストロークスタイル = 'hsla(' this.hue ' , 100%, ' これ.明るさ '%, ' これ.alpha ')';
- self.ctx.ストローク(); if(self.flickerDensity > 0){ var inverseDensity = 50 - self.flickerDensity; if(rand(0, inverseDensity) === inverseDensity){
- self.ctx.beginPath();
- self.ctx.arc(Math.round(this.x), Math.round(this .y), rand(this.lineWidth,this.lineWidth 3)/2, 0, Math.PI*2, false) self.ctx.closePath(); var randAlpha = rand(50,100)/100;
- self.ctx.fillStyle = 'hsla(' this.hue ' , 100%, ' この.明るさ '%, ' randAlpha ' )';
- self.ctx.fill();
- }
- }
- };
このセクションの JS コードの機能は、フラワー爆発後の小さな粒子の作成を実行することであり、描画方法からわかるように、任意の随伴点が構築され、この範囲の随伴点にカーボン粒子が散在する可能性があります。
- var Firework = function(startX, startY, targetX, targetY){ this.x = startX; これ.y = startY; これ.startX = startX; これ.startY = startY; this.hitX = false; this.hitY = false; this.coordLast = [
- {x: startX, y: startY},
- {x: startX, y: startY},
- {x: startX, y: startY}
- ]; この.targetX = targetX; この.targetY = targetY; this.speed = self.fworkSpeed; this.angle = Math.atan2(targetY - startY, targetX - startX); this.shockwaveAngle = Math.atan2(targetY - startY, targetX - startX) (90*(Math.PI/180)); this.acceleration = self.fworkAccel/100; this.hue = self.currentHue; this.brightness = rand(50, 80); この.alpha = rand(50,100)/100; この.lineWidth = self.lineWidth; この.targetRadius = 1;
- };
- Firework.prototype.update = 関数(インデックス){
- self.ctx.lineWidth = this.lineWidth;
- vx = Math.cos(this.angle) * this.speed,
- vy = Math.sin(this.angle) * this.speed; this.speed *= 1 this.acceleration; this.coordLast[2].x = this.coordLast[1].x; this.coordLast[2].y = this.coordLast[1].y; this.coordLast[1].x = this.coordLast[0].x; this.coordLast[1].y = this.coordLast[0].y; this.coordLast[0].x = this.x; this.coordLast[0].y = this.y; if(self.showTarget){ if(this.targetRadius < 8){ this.targetRadius = .25 * self.dt;
- } else { this.targetRadius = 1 * self.dt;
- }
- } if(this.startX >= this.targetX){ if(this.x vx <= this.targetX){ this.x = this.targetX; this.hitX = true;
- } else { this.x = vx * self.dt;
- }
- } else { if(this.x vx >= これ.targetX){ これ.x = これ .targetX; this.hitX = true;
- } else { this.x = vx * self.dt;
- }
- } if(this.startY >= this.targetY){ if(this.y vy <= this.targetY){ this.y = this.targetY; this.hitY = true;
- } else { this.y = vy * self.dt;
- }
- } else { if(this.y vy >= これ.targetY){ これ.y = これ .targetY; this.hitY = true;
- } else { this.y = vy * self.dt;
- }
- } if(this.hitX && this.hitY){ var randExplosion = rand(0, 9);
- self.createParticles(this.targetX, this.targetY, this.hue);
- self.fireworks.splice(index, 1);
- }
- };
- Firework.prototype.draw = 関数(){
- self.ctx.lineWidth = this.lineWidth; var coordRand = (rand(1,3)-1);
- self.ctx.beginPath();
- self.ctx.moveTo(Math.round(this.coordLast[coordRand].x), Math.round(this.coordLast[coordRand].y));
- self.ctx.lineTo(Math.round(this.x), Math.round(this .y));
- self.ctx.closePath();
- self.ctx.ストロークスタイル = 'hsla(' this.hue ' , 100%, ' これ.明るさ '%, ' これ.alpha ')';
- self.ctx.ストローク(); if(self.showTarget){
- self.ctx.save();
- self.ctx.beginPath();
- self.ctx.arc(Math.round(this.targetX), Math.round(this .targetY),this.targetRadius, 0, Math.PI*2, false)
- self.ctx.closePath();
- self.ctx.lineWidth = 1;
- self.ctx.ストローク();
- self.ctx.restore();
- } if(self.showShockwave){
- self.ctx.save();
- self.ctx.translate(Math.round(this.x), Math.round(this .y));
- self.ctx.rotate(this.shockwaveAngle);
- self.ctx.beginPath();
- self.ctx.arc(0, 0, 1*(this.speed/5), 0, Math.PI, true);
- self.ctx.drawingStyle = 'hsla(' this.hue ' , 100%, ' この.明るさ '%,' rand(25, 60)/100 ')';
- self.ctx.lineWidth = this.lineWidth;
- self.ctx.ストローク();
- self.ctx.restore();
- }
- };
このセグメントの JS コードは、フラワー サンプルを作成するものであり、マウス ポイントが画布内のある時点で、フラワー送信の目的がそのポイントにあることが、draw メソッドからもわかります。
この規約 HTML5 Canvas の効果の核心コードはこのようなものであり、大家に届くことを望んでおり、継続的に注目している脚本家、私たちはより多くの優れた文章を共有するよう努めています。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









H5プロジェクトを実行するには、次の手順が必要です。Webサーバー、node.js、開発ツールなどの必要なツールのインストール。開発環境の構築、プロジェクトフォルダーの作成、プロジェクトの初期化、コードの書き込み。開発サーバーを起動し、コマンドラインを使用してコマンドを実行します。ブラウザでプロジェクトをプレビューし、開発サーバーURLを入力します。プロジェクトの公開、コードの最適化、プロジェクトの展開、Webサーバーの構成のセットアップ。

H5ページの制作とは、HTML5、CSS3、JavaScriptなどのテクノロジーを使用したクロスプラットフォーム互換のWebページの作成を指します。そのコアは、ブラウザの解析コード、レンダリング構造、スタイル、インタラクティブ機能にあります。一般的なテクノロジーには、アニメーションエフェクト、レスポンシブデザイン、およびデータ相互作用が含まれます。エラーを回避するには、開発者をデバッグする必要があります。パフォーマンスの最適化とベストプラクティスには、画像形式の最適化、リクエスト削減、コード仕様などが含まれ、読み込み速度とコード品質を向上させます。

H5クリックアイコンを作成する手順には、次のものがあります。画像編集ソフトウェアで正方形のソース画像の準備が含まれます。 H5エディターにインタラクティブ性を追加し、クリックイベントを設定します。アイコン全体をカバーするホットスポットを作成します。ページにジャンプしたり、アニメーションのトリガーなど、クリックイベントのアクションを設定します。 HTML、CSS、およびJavaScriptファイルとしてH5ドキュメントをエクスポートします。エクスポートされたファイルをウェブサイトまたは他のプラットフォームに展開します。

H5はスタンドアロンプログラミング言語ではなく、最新のWebアプリケーションを構築するためのHTML5、CSS3、およびJavaScriptのコレクションです。 1。HTML5は、Webページの構造とコンテンツを定義し、新しいタグとAPIを提供します。 2。CSS3はスタイルとレイアウトを制御し、アニメーションなどの新しい機能を紹介します。 3. JavaScriptは動的な相互作用を実装し、DOM操作と非同期要求を通じて機能を強化します。

はい、H5ページの生産は、HTML、CSS、JavaScriptなどのコアテクノロジーを含むフロントエンド開発のための重要な実装方法です。開発者は、&lt; canvas&gt;の使用など、これらのテクノロジーを巧みに組み合わせることにより、動的で強力なH5ページを構築します。グラフィックを描画するタグまたはJavaScriptを使用して相互作用の動作を制御します。

H5(HTML5)は、マーケティングキャンペーンページ、製品ディスプレイページ、企業プロモーションマイクロウェブサイトなどの軽量アプリケーションに適しています。その利点は、クロスプラットフォームと豊富な対話性にありますが、その制限は複雑な相互作用とアニメーション、ローカルリソースアクセス、オフライン機能にあります。

H5ポップアップウィンドウの作成手順:1。トリガー方法(クリック、時間、終了、スクロール)を決定します。 2。設計コンテンツ(タイトル、テキスト、アクションボタン); 3。SETスタイル(サイズ、色、フォント、背景); 4.コードを実装する(HTML、CSS、JavaScript); 5。テストと展開。

H5ReferStoHtml5、apivotaltechnologyinwebdevelopment.1)html5introduceSnewelementsandapisforrich、dynamicwebapplications.2)Itupp ortsmultimediawithoutplugins、endancingurexperiencecrossdevices.3)semanticelementsimprovecontentstructurendseo.4)H5'srespo
