canvas画图-钟表

2023-11-07 02:58
文章标签 canvas 画图 钟表

本文主要是介绍canvas画图-钟表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

调用了window.requestAnimationFrame(绘制函数),然后在绘制函数中继续调用 window.requestAnimationFrame(绘制函数),这种情况下,每一次绘制都不能影响下一次,故需要在变换开始和结束的时候添加 ctx.save()/ctx.restore()

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title></title><link rel="stylesheet" href="">
</head>
<body><canvas width="200" height="200" style="border: 1px solid #000"></canvas><script>const ctx = document.querySelector('canvas').getContext('2d')function draw() {let time = new Date()let h = time.getHours()h = h>12?h-12:hlet m = time.getMinutes()let s = time.getSeconds()ctx.save()ctx.clearRect(0, 0, 200, 200)ctx.scale(0.5, 0.5)ctx.translate(200, 200)// 绘制直线等都是水平绘制的,反向旋转90度,正好同时间统一起来ctx.rotate(-Math.PI/2)// set gloabal ctx stylesctx.fillStyle = '#fff'ctx.strokeStyle = '#000'ctx.lineWidth = 8ctx.lineCap = 'round'// draw hour marks,12个刻度,每隔2*Math.PI/12ctx.save()for(let i=0;i<12;i++){ctx.beginPath()ctx.moveTo(160,0)ctx.lineTo(175,0)ctx.stroke()ctx.rotate(Math.PI/6)}ctx.restore()// draw minute marks,一共60个刻度,碰到5的倍数就省略不画,每隔2*Math.PI/(12*5)ctx.save()ctx.lineWidth = 5for (let i = 0; i < 60; i++) {if(i%5!==0){ctx.beginPath()ctx.moveTo(164, 0)ctx.lineTo(170, 0)ctx.stroke()}ctx.rotate(Math.PI / 30)}ctx.restore()// NUMBERctx.save()ctx.fillStyle = "#000"ctx.font = "30px verdana"ctx.rotate(Math.PI / 2)for (let i = 1; i <= 12; i++) {// 半径为圆盘的半径 - 20let x = 140 * Math.sin(i * Math.PI / 6)let y = -140 * Math.cos(i * Math.PI / 6)ctx.fillText(i, x - 10, y + 9)}ctx.restore()//draw hourctx.save()ctx.lineWidth = 12ctx.rotate(h*Math.PI/6+m*Math.PI/360+s*Math.PI/21600)ctx.beginPath()ctx.moveTo(-15,0)ctx.lineTo(105,0)ctx.stroke()ctx.restore()//draw minutectx.save()ctx.lineWidth = 6ctx.rotate( m *2* Math.PI / 60 + s *2* Math.PI / (60*60))ctx.beginPath()ctx.moveTo(-20, 0)ctx.lineTo(126, 0)ctx.stroke()ctx.restore()// draw seconds ctx.save()ctx.lineWidth = 3ctx.rotate(s*Math.PI/30)ctx.strokeStyle = "#f00"ctx.beginPath()ctx.moveTo(-25,0)ctx.lineTo(110,0)ctx.stroke()ctx.beginPath()ctx.fillStyle = "red"ctx.arc(0, 0, 10,0, 2 * Math.PI, true)ctx.fill()ctx.beginPath()ctx.arc(120,0, 10, 0, 2*Math.PI, true)ctx.stroke()ctx.restore()// drwa clock circlectx.save()ctx.strokeStyle = "#325fa2"ctx.beginPath()ctx.arc(0,0, 180, 0, 2*Math.PI, true)ctx.stroke()ctx.restore()ctx.restore()window.requestAnimationFrame(draw)}window.requestAnimationFrame(draw)</script>
</body>
</html>

这篇关于canvas画图-钟表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/360788

相关文章

Windows11电脑上自带的画图软件修改照片大小(不裁剪尺寸的情况下)

针对一张图片,有时候上传的图片有大小限制,那么在这种情况下如何修改其大小呢,在不裁剪尺寸的情况下 步骤如下: 1.选定一张图片,右击->打开方式->画图,如下: 第二步:打开图片后,我们可以看到图片的大小为82.1kb,点击上面工具栏的“重设大小和倾斜”进行调整,如下: 第三步:修改水平和垂直的数字,此处我修改为分别都修改为50,然后保存,可以看到大小变成63.5kb,如下:

程序员都在使用的画图工具

大家好,我是袁庭新。 程序员都在使用的画图工具,你一定没用过这款画图工具吧!我教程中的架构图都是用它来画的。 比如我编写的RDB工作原理图就是用draw.io绘制的,如下图所示: 再例如Redis集群故障恢复原理图我也是通过draw.io工具绘制的,如下图所示: 是不是觉得draw.io绘制的图形特别简洁、美观。它的官网是: https://www.drawio.com dra

python画图|3D图基础教程

python画3D图和2D流程类似: 【a】定义一个自变量x; 【b】定义两个因变量y和z; 【c】直接输出plot(x,y,z) 今天就一起快乐学习一下画3D图的基础教程。 【1】官网教程 打开官网,可以迅速找到学习教程,参考下述链接: https://matplotlib.org/stable/plot_types/3D/plot3d_simple.html 然后我们解读一下示

python画图|垂线标记系列

进行了一段时间的直方图学习之后,发现python的matplo居然还支持画垂线标记图,赶紧把它记录下来。 直方图绘制教程见下述链接: 【a】直方图绘制基础教程:python画图|直方图绘制教程-CSDN博客 【b】 直方图绘制进阶教程:python画图|直方图绘制教程进阶-CSDN博客 【c】 堆叠直方图绘制教程:python画图|堆叠直方图绘制-CSDN博客 【d】并列直方图绘制教程:

【python 数据可视化】美丽漂亮的画图神器--pyecharts

今天我们介绍下pyechats 的用法和一个简单的例子。 安装: pip install pyecharts 步骤1:导入相关包: # 导入包import pandas as pdfrom pyecharts.charts import *from pyecharts import options as optsfrom pyecharts.globals import *f

影响画布微信小程序canvas及skyline和webview用户界面布局的关键流程

影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 目录 影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 一、微信小程序canvas开发流程 1.1、官方指南 1.2、客制化开发 第一步:在 WXML 中添加 canvas 组件 第二步:获取 Canvas 对象和渲染上下文 第三步 画布#ID选择器执行回调——

plot()画图,横或纵坐标出现乱序

现象: import matplotlib.pyplot as plt plt.plot(x, y, ‘-’) 画折线图,出现了如下,纵坐标数据密集显示,放大之后,出现了乱序。 解决方法: 1.先查看横纵坐标的数据类型。 print(“type:”, type(y)). 我这里打印是字符串类型。 type: <class ‘str’> 2.横纵坐标数据类型需要是int ,float

python画图|并列直方图绘制

前述学习过程中,已经知晓普通直方图绘制和堆叠直方图绘制,参考链接如下: 西猫雷婶-CSDN博客 有时候,我们还会遇到并列直方图绘制的需求,今天就探索一下。 【1】官网教程 按照惯例,我们先来到官网: https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html#sphx-glr-gallery-lin

Android canvas save restore saveLayer的异同点

一、基础操作 drawText、drawRect、drawColor等 对于这些基础操作,相信每一个安卓开发者都能说上个一二点出来,这些就不多做介绍,api 工程师必备技能之一。 在进阶之前,先回答这个问题:    问:canvas既然大家都理解为画布,那如果先在画布上绘制了某些内容,然后再canvas.rotate旋转了画布,为什么这些已经绘制在画布上的内容不会跟随着旋转?    答:由此可

【时间盒子】-【5.绘制闹钟】动态绘制钟表和数字时间

Tips: @Preview装饰器,支持组件可预览; @Component装饰器,自定义组件; Canvas组件的使用; 使用RenderingContext在Canvas组件上绘制图形,请参考官方文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-canvasrenderingcontex