使用 HTML5 Canvas 打造炫酷的數字時鐘動畫

在 Web 開發中,HTML5 的 canvas 元素為我們帶來了強大的繪圖能力,結合 JavaScript,可以實現各種酷炫的效果。今天,我們將深入剖析一段經典的 彩色數字時鐘動畫 代碼,并理解它是如何通過物理模擬實現數字切換時的炫酷粒子效果。

在這里插入圖片描述

1. 功能介紹

這段代碼的核心功能是:

  • HTML5 Canvas 上繪制一個 數字時鐘(小時:分鐘:秒)。
  • 當數字發生變化(比如秒鐘跳動),會觸發一個 彩色小球掉落動畫,模擬重力與彈跳。
  • 每個彩色小球有不同的顏色、速度和彈跳系數,形成隨機且自然的效果。

最終效果:

  • 時鐘不斷刷新,每次數字切換時,舊數字的點陣轉化成彩色小球,自然下落并反彈,酷炫十足!

2. 代碼結構概覽

代碼使用了一個立即執行函數 (function(){ ... })(); 來封裝所有邏輯,避免變量污染全局作用域。

主要模塊

  1. 參數定義

    var t = 820;  // Canvas 寬度
    var a = 250;  // Canvas 高度
    var r = 7;    // 每個圓點的半徑
    var n = 10;   // 數字間距
    var e = 0.65; // 彈性系數(模擬反彈效果)
    
  2. 顏色數組

    const v = ["#33B5E5","#0099CC","#AA66CC","#9933CC","#99CC00","#669900","#FFBB33","#FF8800","#FF4444","#CC0000"
    ];
    
  3. 數字點陣模板
    用二維數組表示每個數字(0-9 以及冒號),例如:

    var u = [// 0 的點陣[[0,0,1,1,1,0,0],[0,1,1,0,1,1,0],...],// 1 的點陣[[0,0,0,1,1,0,0],...]// 依次類推
    ];
    
  4. 核心函數

    • l():獲取當前時間,繪制對應數字,如果數字變化,生成彩色小球。
    • s():在數字變化時,創建彩色小球。
    • i():繪制小球。
    • g():更新小球位置,模擬重力和反彈。
    • m():繪制數字點陣。

3. 核心邏輯解析

(1) 繪制數字

代碼通過點陣數組 u[num],利用雙層循環繪制每個小圓點:

function m(offsetX, offsetY, num, ctx) {var matrix = u[num];for (var i = 0; i < matrix.length; i++) {for (var j = 0; j < matrix[i].length; j++) {if (matrix[i][j] == 1) {ctx.beginPath();ctx.arc(offsetX + r + r * 2 * j, offsetY + r + r * 2 * i, r, 0, 2 * Math.PI);ctx.fill();}}}return offsetX + matrix[0].length * r * 2;
}

原理:每個數字都是由多個圓點組成,這些圓點根據點陣的 1 來決定是否繪制。


(2) 生成彩色小球

當數字發生變化時,將變化的數字點陣轉化為彩色小球對象,并加入數組:

function s(digit) {var matrix = u[digit.num];for (var i = 0; i < matrix.length; i++) {for (var j = 0; j < matrix[i].length; j++) {if (matrix[i][j] == 1) {var ball = {offsetX: digit.offsetX + r + r * 2 * j,offsetY: 30 + r + r * 2 * i,color: v[Math.floor(Math.random() * v.length)],g: 1.5 + Math.random(),vx: Math.pow(-1, Math.ceil(Math.random() * 10)) * 4 + Math.random(),vy: -5};o.push(ball);}}}
}

亮點vx 隨機正負,vy 初始向上,g 模擬重力加速度。

(3) 模擬重力與彈跳

每 50ms 更新一次:

function g() {var n = 0;for (var i = 0; i < o.length; i++) {var ball = o[i];ball.offsetX += ball.vx;ball.offsetY += ball.vy;ball.vy += ball.g;// 碰到底部,反彈if (ball.offsetY > a - r) {ball.offsetY = a - r;ball.vy = -ball.vy * e; // 乘以彈性系數}if (ball.offsetX > r && ball.offsetX < t - r) {o[n++] = o[i];}}while (o.length > n) {o.pop();}
}

真實感:小球會掉落、彈起,逐漸停下,最后被移除。

4. 運行使用

把這段代碼嵌入 HTML 文件即可運行:

<div class="card-content">
<canvas id="canvas" style="width:97%;" width="820" height="250"></canvas>
<script src="clock.js"></script>
</div>

最終效果:
數字時鐘動態更新
數字變化時,彩色小球飛濺,帶有物理彈跳效果
非常適合做 網站裝飾Canvas 動畫練習

5. 完整代碼

完整代碼:https://blog.csdn.net/T19900/article/details/150365059

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93329.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93329.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

XCZU6CG-2FFVC900I Xilinx FPGA AMD ZynqUltraScale+ MPSoC

XCZU6CG-2FFVC900I Xilinx FPGA&#xff08; AMD&#xff09;Zynq UltraScale MPSoC 。在處理系統&#xff08;PS&#xff09;方面&#xff0c;XCZU6CG 系列通常集成了 ARM Cortex-A53 應用核與 Cortex-R5 實時核的組合&#xff08;典型為 A53 多核 R5 雙核組合&#xff09;&…

Navicat 詢問 AI | 優化 SQL 查詢

近期&#xff0c;我們發布了 Navicat 17.3 版本。這一版本實現了全方位升級&#xff0c;包括對 AI 功能大升級、支持達夢、金倉、瀚高、支持阿里通義千問等 AI 大模型&#xff0c;支持凝思 OS 以及多項 UI 改進。今天&#xff0c;我們將深入介紹 Navicat AI 功能之“詢問 AI ”…

4.6 Vue 3 中的模板引用 (Template Refs)

在 Vue 3 中&#xff0c;ref 是一個核心的響應式 API&#xff0c;但它在模板中還有另一個非常重要的用途&#xff1a;獲取對 DOM 元素或子組件實例的直接引用。這就是我們所說的“模板引用”。核心概念目的&#xff1a;讓你在父組件中能夠直接訪問并操作特定的 DOM 元素或子組件…

模式匹配自動機全面理論分析

模式匹配是什么 模式匹配是計算機科學中一個基礎且重要的問題&#xff0c;廣泛應用于文本編輯、信息檢索、網絡安全、生物信息學等多個領域。簡單來說&#xff0c;模式匹配就是在一個主文本中查找一個或多個特定模式串的出現位置。隨著計算機處理能力的提升和數據規模的擴大&am…

AI 搜索時代:引領變革,重塑您的 SEO 戰略

隨著谷歌轉向人工智能驅動的答案&#xff0c;使用以關鍵字和反向鏈接為中心的過時和傳統的 SEO 策略不再起到任何作用。 由于 Google AI Overviews 和零點擊搜索的興起&#xff0c;自然點擊量正在下降&#xff0c;用戶無需點擊任何網站即可直接在 Google 的搜索結果頁面上獲得答…

【網站深入seo方法】

目錄 ①對于更成熟的網站&#xff0c;簡單的index.html的入口文件的seo已經無法滿足&#xff0c;需要在商品詳情不同商品被搜索時賦予不同的title和description。 ②通過設置站點所有頁面都新增Canonical標簽&#xff0c;指定規范鏈接地址給谷歌并規避聯盟的重復內容頁面。 ③…

ROS move_base 混合功能導航 RealSense D435i + 3D 點云地圖 + 樓層切換 + 路徑錄制 + 路徑規劃

Mixed-Navigation 這個博客也是記錄我們的一個開源項目&#xff0c;其作用是混合功能導航。由于現有的 Fast-Lio-Localization 只實現了定位功能&#xff0c;但對于路徑規劃和樓層切換沒有具體實現&#xff0c;因此我們開出了這個倉庫作為參考。該倉庫的核心功能如下&#xff…

初識c語言————宏定義和調用

目錄&#xff1a;一.不帶參數的宏二.帶參數宏一.不帶參數的宏不帶參數的宏是指用#define指令定義的簡單文本替換規則&#xff0c;它沒有參數列表&#xff0c;直接替換標識符為相應的文本其一般形式為&#xff1a;#define 宏名 文本例如&#xff1a;#define pi 3.14這個代…

數據結構:滿二叉樹 (Full Binary Tree) 和 完全二叉樹 (Complete Binary Tree)

目錄 重要的術語澄清 完美二叉樹 (Perfect Binary Tree) 完全二叉樹 (Complete Binary Tree) 大比拼 (Comparison) 相互關系的第一性推導 我們來深入探討兩種在算法中非常重要的、具有特定“形狀”的二叉樹&#xff1a;滿二叉樹 (Full Binary Tree) 和 完全二叉樹 (Compl…

OpenJDK 17的C1和C2編譯器實現中,方法返回前插入安全點(Safepoint Poll)的機制

OpenJDK 17 JIT編譯器堆棧分析-CSDN博客 在OpenJDK 17的C1和C2編譯器實現中&#xff0c;方法返回前插入安全點&#xff08;Safepoint Poll&#xff09;的機制主要涉及以下關鍵步驟&#xff0c;結合源代碼進行分析&#xff1a; 1. 安全點輪詢樁&#xff08;Safepoint Poll Stu…

【論文筆記】STORYWRITER: A Multi-Agent Framework for Long Story Generation

論文信息 論文標題&#xff1a;StoryWriter: A Multi-Agent Framework for Long Story Generation 論文作者&#xff1a;Haotian Xia, Hao Peng et al. (Tsinghua University) 論文鏈接&#xff1a;https://arxiv.org/abs/2506.16445 代碼鏈接&#xff1a;https://github.com/…

Cohere 開發企業級大型語言模型(LLM)

Cohere 是一家專注于開發企業級大型語言模型&#xff08;LLM&#xff09;的公司。該公司推出了一系列名為 “Command” 的模型&#xff0c;其中最強大的 “Command A” 于今年三月首次亮相 Cohere 還提供嵌入模型&#xff0c;這是一種將文件轉化為神經網絡可以理解的緊湊數值形…

Rust Web框架Axum學習指南之入門初體驗

一、準備階段 確保已經安裝 rust&#xff0c;開發環境使用 vscode 或者 rustrover 都可以。接著就可以創建項目&#xff0c;通過編輯器創建或者命令行創建都可以&#xff1a; cargo new axum-admin二、添加依賴 添加依賴如下&#xff1a; [package] name "axum-admin&quo…

autofit.js: 自動調整HTML元素大小的JavaScript庫

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

RocketMQ 命名服務器(NameServer)詳解

&#x1f680; RocketMQ 命名服務器&#xff08;NameServer&#xff09;詳解 NameServer 是 RocketMQ 架構中的輕量級路由發現服務&#xff0c;它不參與消息的收發&#xff0c;但承擔著整個集群的“地址簿”和“導航系統”的關鍵角色。 理解 NameServer 的設計與工作原理&#…

代碼隨想錄算法訓練營四十三天|圖論part01

深度優先搜索&#xff08;dfs&#xff09;理論基礎 dfs就是可一個方向去搜直到盡頭再換方向&#xff0c;換方向的過程就涉及到了回溯。 代碼框架 因為dfs搜索可一個方向&#xff0c;并需要回溯&#xff0c;所以用遞歸的方式來實現是最方便的。 先來回顧一下回溯法的代碼框架…

飛算JavaAI金融風控場景實踐:從實時監測到智能決策的全鏈路安全防護

目錄一、金融風控核心場景的技術突破1.1 實時交易風險監測系統1.1.1 高并發交易數據處理1.2 智能反欺詐系統架構1.2.1 多維度欺詐風險識別1.3 動態風控規則引擎1.3.1 風控規則動態管理二、金融風控系統效能升級實踐2.1 風控模型迭代加速機制2.1.1 自動化特征工程結語&#xff1…

Vue 組件二次封裝透傳slots、refs、attrs、listeners

最近寫了一個開源項目&#xff0c;有些地方需要二次封裝&#xff0c;需要透傳一些數據&#xff0c;需要注意的是ref&#xff0c;我這里使用倆種方式間接傳遞ref&#xff0c;具體如下&#xff1a; 使用&#xff1a; import VideoPlayer from ./index.jsVue.use(VideoPlayer)inde…

介紹大根堆小根堆

文章目錄一、核心定義與結構特性示例&#xff08;以“數組存儲堆”為例&#xff09;二、堆的兩個核心操作1. 插入操作&#xff08;以小根堆為例&#xff09;2. 刪除極值操作&#xff08;以小根堆為例&#xff0c;刪除根節點的最小值&#xff09;三、小根堆 vs 大根堆&#xff1…

【Html網頁模板】賽博朋克數據分析大屏網頁

目錄專欄導讀? 項目概述&#x1f3a8; 設計理念&#x1f6e0;? 技術架構核心技術棧設計模式&#x1f3af; 核心功能1. 視覺效果系統&#x1f308; 色彩體系2. 數據可視化模塊&#x1f4ca; 主圖表系統&#x1f4c8; 性能監控面板3. 實時數據流系統? 數據流動畫&#x1f4ca;…