Canvas API 实现自定义模拟模拟时钟(非系统时间,起始9:00)

心靈之曲

心靈之曲

2026-07-20

170人浏览

原创

Canvas API 实现自定义模拟模拟时钟(非系统时间,起始9:00)

本文详解如何使用 canvas api 从零构建一个纯逻辑驱动的模拟模拟时钟:三针独立运动、起始指向9:00、秒针每秒转6°、分针每分钟转6°、时针每分钟转0.5°,全程不依赖 date 对象,强调绘图状态管理与职责分离。

本文详解如何使用 canvas api 从零构建一个纯逻辑驱动的模拟模拟时钟:三针独立运动、起始指向9:00、秒针每秒转6°、分针每分钟转6°、时针每分钟转0.5°,全程不依赖 date 对象,强调绘图状态管理与职责分离。

实现一个脱离系统时间、完全由逻辑控制的模拟模拟时钟,关键在于精确建模指针运动关系严谨管理 Canvas 绘图状态。本教程基于原始需求——起始时刻为 9:00(即时针指向左方,分针与秒针均指向12),并以每秒为单位推进动画,不使用 Date 对象,而是通过计数器(ct)和角度累加实现物理级模拟。

? 角度计算原理(核心逻辑)

  • 秒针:每秒前进 6°(360° ÷ 60 秒),故 angleS += 6;
  • 分针:每分钟(即每 60 秒)前进 6°(360° ÷ 60 分),因此当 ct % 60 === 0 时执行 angleM += 6;
  • 时针:每小时转 30°(360° ÷ 12 小时),即每分钟转 0.5°(30° ÷ 60 分)。若错误地等待 3600 秒(1 小时)才跳动 30°,会导致时针“跳跃”而非平滑转动。正确做法是:每过 60 秒(1 分钟),时针增加 0.5° —— 这正是真实机械钟表的渐进式运动。

起始角度需匹配 9:00:

  • 9:00 对应时针指向 270°(或 −90°),即 angleH = 270;
  • 分针与秒针均指向 12 → 0°,即 angleM = angleS = 0;
    但注意:Canvas 的 rotate() 以弧度为单位,且默认旋转原点在画布左上角。因此必须配合 translate() 将坐标系原点移至钟面中心(120, 120),再旋转、绘制、还原。

✅ 正确使用 save() 与 restore()

原始代码中频繁误用 save()/restore(),导致状态混乱(如多次 restore() 而未对应 save())。最佳实践是:每个独立指针绘制前 save(),绘制后立即 restore(),确保彼此互不干扰。例如:

Canva可画(Windows版)
Canva可画(Windows版)

Windows版Canva可画,适用于Windows 10及以上版本。无需担心网络波动,无需顾虑浏览器兼容性,让你能够更加专注在设计上。

下载
function drawHourHand(ctx) {
  ctx.save(); // 保存当前状态(含坐标系、颜色、线宽等)
  ctx.translate(120, 120); // 将原点移至钟心
  ctx.rotate((Math.PI / 180) * angleH); // 转换为弧度并旋转
  ctx.translate(-120, -120); // 恢复原点位置(为后续 moveTo 准备)
  ctx.beginPath();
  ctx.moveTo(120, 120);
  ctx.lineTo(45, 120); // 从中心指向 9 点方向(x=45 即左偏)
  ctx.lineWidth = 9;
  ctx.strokeStyle = 'black';
  ctx.lineCap = 'round';
  ctx.stroke();
  ctx.restore(); // 完全恢复之前状态,不影响其他指针
}

同理封装 drawMinuteHand() 和 drawSecondHand(),并在 showHands() 中依次调用,彻底贯彻单一职责原则。

⚙️ 完整结构优化要点

  • 初始化角度:angleS = 0; angleM = 0; angleH = 270;(9:00 时针朝左);
  • 定时器逻辑:setInterval(update, 1000) 在 draw() 中启动,避免重复绑定;
  • 清屏与重绘:update() 中先 clearRect(),再 showClock() + showHands(),保证画面干净;
  • 钟面绘制:showClock() 内部也使用 save()/restore() 包裹,防止影响指针绘制;
  • 数字与品牌:保留 “Timex” 标识及 12/3/6/9 数字,增强视觉识别性。

? 注意事项与调试建议

  • ctx.translate(x,y) 改变的是整个坐标系原点,务必成对使用 translate(-x,-y) 回退;
  • rotate() 是围绕当前原点旋转,若未 translate() 到钟心,则指针会绕画布左上角旋转,造成严重错位;
  • 若指针长度/位置异常,请检查 lineTo() 坐标是否基于中心(120,120)计算(如秒针 lineTo(120,10) 表示向上延伸至 y=10);
  • 起始 9:00 验证:时针 angleH = 270 → rotate(270°) 后,水平向左的线段 (120,120) → (45,120) 正确指向 9 点。

此方案不仅满足功能需求,更建立了可扩展的 Canvas 动画架构:各指针解耦、状态隔离、逻辑清晰,为后续添加动画缓动、昼夜模式或交互控制奠定坚实基础。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

2023.10.23

2051

6

canva可画使用技巧汇总
canva可画使用技巧汇总

本专题汇集了PHP中文网精心整理的Canva可画新手使用技巧大全,专为零基础用户打造。无论你是想制作精美海报、PPT还是社交媒体配图,这里都有从注册登录、模板搜索到AI辅助设计、导出分享的全流程保姆级教程。通过深入浅出的图文指南,帮助你快速跨越设计门槛,轻松掌握Canva可画的实用操作,让每个人都能成为设计达人!

2026.05.19

144

21

canva可画新手使用指南
canva可画新手使用指南

本专题专为零基础用户打造,系统讲解Canva可画的核心功能与实用技巧。从注册登录、模板选择到图文编辑、导出分享,手把手带你快速上手。涵盖海报、PPT、简历等高频场景,结合AI工具提升效率,让你5分钟做出专业级设计,轻松应对学习、工作与社交需求。

2026.05.06

186

25

canva可画硬件门槛与适配设备指南
canva可画硬件门槛与适配设备指南

本专题聚焦Canva可画的硬件门槛与适配设备指南,全面解析网页版与App在不同终端上的运行要求。结合PHP中文网提供的专业技术教程,帮助用户精准排查设备卡顿、白屏等问题,快速判断电脑、平板及手机是否满足流畅使用Canva可画的各项硬性指标。

2026.05.19

46

11

canva可画使用技巧汇总
canva可画使用技巧汇总

本专题汇集了PHP中文网精心整理的Canva可画新手使用技巧大全,专为零基础用户打造。无论你是想制作精美海报、PPT还是社交媒体配图,这里都有从注册登录、模板搜索到AI辅助设计、导出分享的全流程保姆级教程。通过深入浅出的图文指南,帮助你快速跨越设计门槛,轻松掌握Canva可画的实用操作,让每个人都能成为设计达人!

2026.05.19

144

21

Qt Creator按钮响应设置方法
Qt Creator按钮响应设置方法

信号槽是 Qt 开发的核心机制。本专题整理 Qt Creator 中按钮点击、菜单触发、输入变化、窗口事件、自定义信号、自动连接槽函数和手动 connect 写法,帮助用户理解界面控件如何和 C++ 代码联动。

2026.08.05

0

10

Qt Creator新建项目使用教程
Qt Creator新建项目使用教程

本专题整理 Qt Creator 新建项目、打开已有工程、项目模板选择、目录结构、源文件管理、构建目录、运行配置和项目迁移方法,重点解决新手不知道选 qmake 还是 CMake、项目打不开、文件不参与编译等常见问题。

2026.08.05

0

10

maven常用插件使用大全
maven常用插件使用大全

PHP中文网精心整理Maven主流插件用法合集,涵盖编译、测试、打包等常用插件使用大全。从基础配置到进阶实战,详细解析各插件功能与适用场景,助你轻松掌握Maven自动化构建,解决Java项目开发痛点,是开发者必备的实用指南。

2026.08.05

0

31

PyCharm快速入门指南
PyCharm快速入门指南

本专题汇总了PyCharm快速入门的全套指南与教程,涵盖从官网下载安装、创建第一个Python项目、配置虚拟环境,到代码编辑、运行调试等基础操作,并整理了版本控制(Git)集成、常用高效快捷键及实用插件等进阶技巧,助你快速上手这款高效的Python IDE。

2026.08.05

2

17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Canvas 绘制时钟
Canvas 绘制时钟

共7课时 | 1.7万人学习

HTML5 Canvas 动画实战教程
HTML5 Canvas 动画实战教程

共28课时 | 6.9万人学习

Canva使用教程
Canva使用教程

共0课时 | 0人学习