canvas示例系列:

  • html:canvas画布绘图简单入门-1
  • html:canvas画布绘图简单入门-2
  • html:canvas画布绘图简单入门-绘制时钟-3
  • html:canvas画布绘图简单入门-刮刮乐-4

示例10:绘制时钟

<canvas id="canvas"width="600"height="600"></canvas><script>let canvas = document.querySelector('#canvas');let ctx = canvas.getContext('2d');let width = canvas.widthlet height = canvas.height// 绘制内容区域相对画布的大小 80%let scale = 0.8;// 计算半径let radius = Math.floor(Math.min(width, height) * scale * 0.5);console.log('radius', radius);// 绘制外边框// ctx.beginPath();// ctx.strokeRect(0, 0, width, height);// ctx.closePath()// 绘制时钟刻度function drawClockScale({number = 12,strokeStyle = 'black',lineWidth = 3,lineLength = 20,}) {ctx.save();ctx.strokeStyle = strokeStyle;ctx.lineWidth = lineWidth;let rotateAngle = (360 / number);for (let i = 0; i < number; i++) {ctx.rotate((Math.PI / 180) * rotateAngle);ctx.beginPath();ctx.moveTo(radius - lineLength, 0);ctx.lineTo(radius, 0);ctx.stroke();ctx.closePath()}ctx.restore();}function drawClock() {ctx.clearRect(0, 0, width, height);ctx.save();// 将坐标轴原点移动到画布中心ctx.translate(width / 2, height / 2);// 旋转坐标轴x指向画布正上方ctx.rotate(-Math.PI / 180 * 90);// 分针和秒针的刻度drawClockScale({number: 60,strokeStyle: 'green',lineWidth: 4,lineLength: 14});// 时针刻度drawClockScale({number: 12,strokeStyle: 'red',lineWidth: 8,lineLength: 20});// 绘制指针let now = new Date();let hour = now.getHours();let minute = now.getMinutes();let second = now.getSeconds();console.log(`${hour}: ${minute}: ${second}`);// 绘制秒针ctx.save();ctx.beginPath();ctx.rotate((Math.PI / 180) * (360 / 60) * second);ctx.strokeStyle = "deepskyblue";ctx.lineWidth = 2;ctx.moveTo(-20, 0);ctx.lineTo(radius - 30, 0);ctx.stroke();ctx.closePath()ctx.restore();// 绘制分针ctx.save();ctx.rotate((Math.PI / 180) * ((360 / 60) * minute + (360 / 60 / 60) * second));ctx.beginPath();ctx.strokeStyle = "green";ctx.lineWidth = 4;ctx.moveTo(-20, 0);ctx.lineTo(radius - 40, 0);ctx.stroke();ctx.closePath()ctx.restore();// 处理成12小时制if (hour > 12) {hour = hour - 12}// 绘制时针ctx.save();ctx.beginPath();ctx.rotate((Math.PI / 180) * ((360 / 12) * hour + (360 / 12 / 60) * minute + (360 / 12 / 60 / 60) *second));ctx.strokeStyle = "red";ctx.lineWidth = 8;ctx.moveTo(-20, 0);ctx.lineTo(radius - 50, 0);ctx.stroke();ctx.closePath()ctx.restore();// 绘制圆心ctx.beginPath();ctx.fillStyle = "grey";ctx.lineWidth = 10;ctx.arc(0, 0, 10, 0, Math.PI / 180 * 360);ctx.fill();ctx.closePath()// 绘制圆ctx.beginPath();ctx.strokeStyle = "grey";ctx.lineWidth = 10;ctx.arc(0, 0, radius, 0, Math.PI / 180 * 360);ctx.stroke();ctx.closePath()ctx.restore();}// 每隔1秒重绘一次setInterval(() => {drawClock();}, 1000)</script>

需要修改坐标轴之前,最好把当前状态保存,绘制完成后再恢复

在线demo: https://mouday.github.io/front-end-demo/canvas/canvas-clock.html

html:canvas画布绘图简单入门-绘制时钟-3相关推荐

  1. html:canvas画布绘图简单入门-画板-5

    canvas示例系列: html:canvas画布绘图简单入门-1 html:canvas画布绘图简单入门-2 html:canvas画布绘图简单入门-绘制时钟-3 html:canvas画布绘图简单 ...

  2. 在canvas画布上多次绘制图形叠加的效果

    如果在画布2d上下文连续绘制多次相同的图形,比如 <!DOCTYPE html> <html lang="en"> <head><meta ...

  3. canvas画布上平铺图片绘制文本

    1️⃣知识点①:如何在canvas画布上平铺图片: ⚠️知识点实现: <!DOCTYPE html> <html><head><meta charset=&q ...

  4. H5网页Canvas画布绘图 图片文字合成

    一个很简单的小列子,直接贴代码,代码中都有注释,下面有demo链接. <html> <head><meta name="viewport" conte ...

  5. JS --- canvas画布的简单使用

    canvas <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为 JavaScript) 在其中绘制图像的 HTML 元素.它可以用来制作照片集或者制作简单(也不是那么简单 ...

  6. 使用Canvas画布实现简单的计时器功能

    使用canvas的画线工具在圆盘中不断的画线,同时需要清除掉上一次的画线,需要对canva的整个画布进行更新: 直接移动和旋转canvas的坐标轴,这样画线的长度就可以固定,且起点和终点的纵坐标始终为 ...

  7. 利用Canvas实现绘图功能(绘制五角星)

    文章目录 要求 过程 一.绘制五角星 二.生成随机数 三.利用循环,生成10个五角星 四.完整代码 存在的问题 要求 利用Canvas编程实现在屏幕上随机位置绘制10个随机大小(边长为20-100dp ...

  8. 前端|利用canvas画布制作地球轨道

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 一.什么是<canvas> <canvas& ...

  9. 鸿蒙应用开发之canvas画布组件介绍

    canvas画布组件用于自定义绘制图形. 方法:getContext和toDataURL getContext:getContext('2d')函数用于获取2D绘图引擎,调用方法为var ctx = ...

最新文章

  1. 西班牙放大招,利用区块链技术防腐
  2. mysql /tmp目录爆满问题的处理
  3. 5G会用什么样的语音通信方案?
  4. 表贴电阻尺寸与什么有关_电路板上为什么会有0欧电阻这种东西?
  5. position定位——让人又爱又恨的属性
  6. 什么样的架构师才是真正的架构师?
  7. shell获取本机ip
  8. c++字符数组整数转换中文大写金额的形式_数字大写转换烦,内置格式多缺陷, VBA函数来解难...
  9. Android系统中震动功能的测试
  10. 阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第3节 注解_15_注解_自定义注解_属性定义...
  11. VTK(三)---在Linux系统上配置NDI Aurora磁导航API(用于手术导航系统的开发)
  12. 51单片机入门——DS18B20
  13. Android实现本地图片、视频左右镜像翻转
  14. mac插网线不能上网_苹果笔记本连接网线不能上网怎么回事
  15. ZOJ:1003 Crashing Balloon(DFS)
  16. 复旦大学计算机考研资料汇总
  17. java与C++中文字符的问题
  18. 鸿蒙荣耀magic2,荣耀Magic2亮相:近100%屏占比+麒麟980+40W超级快充
  19. 数据安全技术研究国外
  20. bias and variance在机器学习中的应用

热门文章

  1. spring框架三种类型项目实现--基础maven类型、纯注解开发型、aop结合注解开发型
  2. .NET-房贷计算器
  3. 星际文件系统优点和原理
  4. 发现一个叫阿尔法城的小站(以后此贴为我记录日常常用网址的帖子了)
  5. [转] Windows下Hook DirectX
  6. 如何下架自己的 APP(APP Store)
  7. Cartopy画地图第八天(冷空气南下,NCL色标使用)
  8. 10-赵志勇机器学习-meanshift
  9. 恒讯科技分析:国内游戏服务器租用市场的大致情况怎么样呢?
  10. 变配电所SF6气体泄漏及环境安全在线监测系统