検索
ホームページウェブフロントエンドH5 チュートリアルHTML5_html5 を使用したデジタル時計の作成に関するチュートリアル チュートリアルのヒント

2015511172231746.png (836×306)

それはこのデジタル時計でした。当時は良いアイデアだと思いましたが、気にしませんでした。昨日まで同僚がこの事例をネットで見てとても素敵だと思ったので、実装方法を考えて少し興味を持ち、真似してみました。それを作りました。違いは、Cen An が div を使用して作成していることです。そしてキャンバスを使って作りました。各ポイントの動きを制御するだけの場合、js を使用して dom の style 属性を制御するのは、js を使用してキャンバスの描画を制御する場合に比べてパフォーマンスが明らかに不足するため、パフォーマンスの面では Canvas を使用した方が良いでしょう。

最初に私が作成したデモを見て、次にこれを行う方法を簡単に説明します。デモを見るために私をつついてください。

これを行うアイデアは非常に簡単で、文字列を通じて各数値の位置を保存することです:
コードをコピー

XML/HTML コードコンテンツをクリップボードにコピー
  1. var numData = [
  2. "1111/1001/1001/1001/1001/1001/1111", //0
  3. "0001/0001/0001/0001/0001/0001/0001", //1
  4. "1111/0001/0001/1111/1000/1000/1111", //2
  5. "1111/0001/0001/1111/0001/0001/1111", //3
  6. "1010/1010/1010/1111/0010/0010/0010", //4
  7. "1111/1000/1000/1111/0001/0001/1111", //5
  8. "1111/1000/1000/1111/1001/1001/1111", //6
  9. "1111/0001/0001/0001/0001/0001/0001", //7
  10. "1111/1001/1001/1111/1001/1001/1111", //8
  11. "1111/1001/1001/1111/0001/0001/1111", //9
  12. "0000/0000/0010/0000/0010/0000/0000", //:
  13. ]

0 はピクセルがないことを意味し、1 はピクセルがあることを意味します。 / は見栄えを良くするためのもので、簡単に言うと、たとえば 0 は次のとおりです。

XML/HTML コードコンテンツをクリップボードにコピー
  1. 1 1 1 1
  2. 1 0 0 1
  3. 1 0 0 1
  4. 1 0 0 1
  5. 1 0 0 1
  6. 1 0 0 1
  7. 1 1 1 1

これで非常に明確になるはずです。文字列で表される : 0 ~ 9 の数値もあります。

次に、ピクセルであるパー​​ティクル オブジェクトを書き込みます。

XML/HTML コードコンテンツをクリップボードにコピー
  1. var P_radius = 8,重力 = 9.8;   
  2. var 粒子 = 関数(){
  3. this.x = 0;   
  4. this.y = 0;   
  5. this.vx = 0;   
  6. this.vy = 0;   
  7. this.color = "";   
  8. this.visible = false;   
  9. this.drop = false;   
  10. }
  11. Particle.prototype = {
  12. コンストラクター:パーティクル、
  13. paint:function(){ //绘自己制
  14. ctx.fillStyle = this.color;   
  15. ctx.beginPath();   
  16. ctx.arc(this.x,this.y,P_radius,0,2*Math.PI);   
  17. ctx.fill();   
  18. },
  19. reset:function(x,y,color){ // 重置
  20. this.x = x;   
  21. this.y = y;   
  22. this.vx = 0;   
  23. this.vy = 0;   
  24. this.color = 色;   
  25. this.visible = true;   
  26. this.drop = false;   
  27. }、
  28. isDrop:function(){ //勾配
  29. this.drop = true;   
  30. var vx = Math.random()*20 15
  31. this.vx = Math.random()> =0.5?-vx : vx;   
  32. },
  33. update:function(time){ //每一帧的アニメーション
  34. if(this.drop){
  35. this.x = this.vx*time;   
  36. this.y = this.vy*time;   
  37. var vy = this.vy Gravity*time;   
  38. if(this.y>=canvas.height-P_radius){
  39. this.y = canvas.height-P_radius
  40. vy = -vy*0.7;   
  41. }
  42. this.vy = vy;   
  43. if(this.x-P_radius||this.x>canvas.width P_radius||this.y-P_radius||this.y>canvas.height P_radius){
  44. this.visible = false;   
  45. }
  46. }
  47. }
  48. }

粒子オブジェクトのプロパティは、位置、速度、および可視かどうかというより単純なものです。つまり、各フレームがパーティクルの動作を更新し、更新中にパーティクルがキャンバスの制限領域を超えて移動する場合、その可用性は false に設定され、パーティクル コンテナ内に保持され、次の使用を待ちます。

良い粒子オブジェクトを書き込んだ後、粒子の位置に応じてどのように移動するかを検討し、同時に粒子が不要なときに自由落体のアニメーションを実行できるようにします。

先画背景(也就是那没像素的白点):


XML/HTML コード复制コンテンツ到剪贴板
  1. function drawBg(){
  2. var tx = (canvas.width-((P_radius*2 X_J)*4*8 7*xjg))/2;   
  3. for(var i=0;i8;i ){
  4. var ty = (canvas.height-((P_radius yjg)*6))/2;   
  5. for(var j=0;jnumData[0].length;j ){
  6. var tt = numData[0].charAt(j);   
  7. if(tt==="/"){
  8. ty =yjg;   
  9. }else {
  10. var x = tx j%5*(P_radius*2 X_J),
  11. y = ty;   
  12. bgctx.fillStyle = "#FFF";   
  13. bgctx.beginPath();   
  14. bgctx.arc(x,y,P_radius,0,2*Math.PI);   
  15. bgctx.fill();   
  16. }
  17. }
  18. tx =xjg 4*(P_radius*2 X_J);   
  19. }
  20. }

まず、背景をオフスクリーン キャンバスに描画し、それをキャッシュします。その後、各フレームを再描画するときに論理計算は必要ありません。オフスクリーン キャンバスを直接描画します。上記のロジックは、2 つのループで 8 つの数値をループし、各数値をポイントごとに描画するというもので、「/」が出現すると新しい行が必要であることを意味し、描画される ty は難しくありません。改行間隔を追加し、txをリセットしてから描画します。このようにして、すべての点を描くことができます。レンダリングは次のとおりです:
2015511172757389.png (1282×350)

背景を描画した後、各秒の時間に従ってデジタル ピクセルの描画を開始します。主なメソッドは次のとおりです:

XML/HTML コードコンテンツをクリップボードにコピー
  1. 関数 setTime(時間){
  2. var h = time.getHours() "",
  3. m = 時間.getMinutes() "",
  4. s = 時間.getSeconds() "";   
  5. hh = h.length===1?"0"時:時;   
  6. mm = m.length===1?"0"分:分;   
  7. ss = s.length===1?"0" s:s;   
  8. var nowdate = h ":" m ":" s;   
  9. var tx = (canvas.width-((P_radius*2 X_J)*4*8 7*xjg))/2, = "";   
  10. for(var i=0;inowdate.length;i ){
  11. var n = nowdate.charAt(i)===":"?10:parseInt( nowdate.charAt(i))、
  12. テキスト = numData[n];   
  13. var ty = (canvas.height-((P_radius yjg)*6))/2;   
  14. スイッチ(i){
  15. case 0:color = "#4DCB74";break;   
  16. case 2:color = "#4062E0";break;   
  17. case 3:color = "#D65050";break;   
  18. case 5:color = "#4062E0";break;   
  19. case 6:color = "#797C17";break;   
  20. }
  21. for(var j=0;jtext.length;j ){
  22. var tt = text.charAt(j);   
  23. if(tt==="/"){
  24. ty =yjg;   
  25. }else{
  26. var x = tx j%5*(P_radius*2 X_J),
  27. y = ty
  28. pp = null
  29. usefullp = null;   
  30. particles.forEach(function(p){
  31. if(p.visible&p.x===x&p.y===y){
  32. ppp = p;   
  33. }else if(!p.visible&usefullp===null){
  34. usefullp = p;   
  35. }
  36. });   
  37. if(pp!==null&tt==="0"){
  38. pp.isDrop();   
  39. else if(pp===null&tt==="1"){
  40. usefullp.reset(x , y , color);   
  41. }
  42. }
  43. }
  44. tx =xjg 4*(P_radius*2 X_J);   
  45. }
  46. }

原理も不难、また跟上面画背景差不多、遍在すべての点、その後当時点の数字変換成る文字列に基づいて判断、当時点がこの点であるか否かを判断する、如果有像素が当時点であるかどうかを判断する粒子オブジェクトが存在する場合には、処理は直ちにスキップされ、粒子オブジェクトが存在しない場合には、再び粒子コンテナ内の使用されていない粒子がその位置にリセットされる。現在、この点には画素はありませんが、粒子が存在するので、この粒子を取得し、この粒子が自由落下するとみなします。

時間設定も写好、就可舞台更新的代了:


XML/HTML コード复制コンテンツ到剪贴板
  1. var timeCount_0 = 0,timeCount_1 = 0 粒子 = [];   
  2. 関数 initAnimate(){
  3. for(var i=0;i200;i ){
  4. var p = new Particle();   
  5. particles.push(p);   
  6. }
  7. timeCount_0 = new Date();   
  8. timeCount_1 = new Date();   
  9. drawBg();   
  10. setTime(timeCount_0)
  11. animate();   
  12. }
  13. 関数 animate(){
  14. ctx.clearRect(0,0,canvas.width,canvas.height);   
  15. ctx.drawImage(bgcanvas,0,0);   
  16. var timeCount_2 = new Date();   
  17. if(timeCount_1-timeCount_0>=1000){
  18. setTime(timeCount_1);   
  19. timeCount_0 = timeCount_1;   
  20. }
  21. particles.forEach(function(p){
  22. if(p.visible){
  23. p.update((timeCount_2-timeCount_1)/70);   
  24. p.paint();   
  25. }
  26. });
  27. timeCount_1 = timeCount_2;
  28. RAF(アニメーション)
  29. initAnimate でアニメーションの初期化を実行します。初期化とは、まず 200 個のパーティクル オブジェクトをインスタンス化し、それらをパーティクル コンテナに入れて保存し、次にタイムスタンプを更新し、背景をキャッシュし、現在の時間を設定して、アニメーション ループ本体を呼び出します。アニメーションを開始します。
animate のロジックも非常に単純です。2 つのタイムスタンプ間の時間差が 1 秒以上の場合、setTime が実行されます。次のステップでは、パーティクル コンテナ内の可視化されたパーティクルをすべてトラバースして再描画します。
これで完了です:


この効果に関して最適化できる領域はまだ多くあります。時計と分は比較的めったに移動しないため、これら 2 つはキャッシュでき、アクションがない場合はキャッシュされたデータを直接描画するだけで済みます。これにより、時間を削減できます。ステージの各フレームの描画 API 呼び出しの数が増加し、パフォーマンスが確実に向上します。ただし、現時点ではパーティクルの数はそれほど多くなく、最適化が行われていない場合でも、200 ~ 300 個のパーティクル オブジェクトで十分です。つまり、オリジナルのポスターはちょっと怠けていたんです。
2015511172909169.png (1263×507) ソースコードのアドレス:

https://github.com/whxaxes/canvas-test/blob/gh-pages/src/Funny-demo/coolClock/index.html

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
HTMLのH5タグは何ですか?HTMLのH5タグは何ですか?May 09, 2025 am 12:11 AM

HTMLのH5タグは、小さいタイトルまたはサブタイトルのタグを付けるために使用される5番目のタイトルです。 1)H5タグは、コンテンツの階層を改良し、読みやすさとSEOを改善するのに役立ちます。 2)CSSと組み合わせて、スタイルをカスタマイズして視覚効果を強化できます。 3)H5タグを合理的に使用して、乱用を避け、論理コンテンツ構造を確保します。

H5コード:Web構造に関する初心者向けガイドH5コード:Web構造に関する初心者向けガイドMay 08, 2025 am 12:15 AM

HTML5にWebサイトを構築する方法には、次のものが含まれます。1。セマンティックタグを使用して、などのWebページ構造を定義します。 2。マルチメディアコンテンツ、使用、タグを埋め込みます。 3.フォーム検証やローカルストレージなどの高度な機能を適用します。これらの手順を通じて、明確な構造と豊富な機能を備えた最新のWebページを作成できます。

H5コード構造:読みやすさのためのコンテンツの整理H5コード構造:読みやすさのためのコンテンツの整理May 07, 2025 am 12:06 AM

合理的なH5コード構造により、ページは多くのコンテンツの中で際立っています。 1)コンテンツなどのセマンティックラベルを使用して、構造を明確にするためにコンテンツを整理します。 2)FlexBoxやグリッドなどのCSSレイアウトを介して、さまざまなデバイスでのページのレンダリング効果を制御します。 3)レスポンシブデザインを実装して、ページがさまざまな画面サイズに適応するようにします。

H5対古いHTMLバージョン:比較H5対古いHTMLバージョン:比較May 06, 2025 am 12:09 AM

HTML5(H5)以降のバージョンのHTMLの主な違いには、次のものが含まれます。1)H5はセマンティックタグを導入し、2)マルチメディアコンテンツをサポートし、3)オフラインストレージ機能を提供します。 H5は、新しいタグやタグなどのAPIを介してWebページの機能と表現力を高め、ユーザーエクスペリエンスやSEO効果を改善しますが、互換性の問題に注意を払う必要があります。

H5対HTML5:用語と関係を明確にするH5対HTML5:用語と関係を明確にするMay 05, 2025 am 12:02 AM

H5とHTML5の違いは次のとおりです。1)HTML5は、構造とコンテンツを定義するWebページ標準です。 2)H5は、迅速な開発とマーケティングに適したHTML5に基づくモバイルWebアプリケーションです。

HTML5機能:H5のコアHTML5機能:H5のコアMay 04, 2025 am 12:05 AM

HTML5のコア機能には、セマンティックタグ、マルチメディアサポート、フォームエンハンスメント、オフラインストレージ、ローカルストレージが含まれます。 1。コードの読みやすさやSEO効果を改善するなどのセマンティックタグ。 2.マルチメディアサポートは、メディアコンテンツを埋め込むプロセスとタグを簡素化します。 3.フォームエンハンスメント新しい入力タイプと検証プロパティを導入し、フォーム開発を簡素化します。 4.オフラインストレージとローカルストレージは、ApplicationCacheとLocalStorageを通じてWebページのパフォーマンスとユーザーエクスペリエンスを改善します。

H5:HTMLの最新バージョンの探索H5:HTMLの最新バージョンの探索May 03, 2025 am 12:14 AM

html5isamajorrevision ofhtmlstandardthatedatedatizeizeswebdevelovement byintunwingnewsemanticelementsandcapabilities.1)itenhancesscodereadability and.2)html5EnableSricher、InteractiveEnceEnceEnceEncedienceEnceDirectembe、and.2)

基本を超えて:H5コードの高度な手法基本を超えて:H5コードの高度な手法May 02, 2025 am 12:03 AM

H5の高度なヒントには以下が含まれます。1。複雑なグラフィックスを使用して描画します。2。ウェブワーカーを使用してパフォーマンスを向上させます。これらのヒントは、開発者がよりダイナミックでインタラクティブで効率的なWebアプリケーションを構築するのに役立ちます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 Mac版

SublimeText3 Mac版

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール