javascript+HTML5 canvas绘制时钟功能示例
作者:辣姐什么鬼 发布时间:2024-05-05 09:14:01
标签:javascript,HTML5,canvas,时钟
本文实例讲述了javascript+HTML5 canvas绘制时钟功能。分享给大家供大家参考,具体如下:
效果如下:
代码:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>www.jb51.net canvas绘制时钟</title>
<style>
div{text-align:center;margin-top:250px;}
</style>
</head>
<body>
<div>
<canvas id="clock" width="300px" height="300px"></canvas>
</div>
<script>
var dom=document.getElementById("clock");
var ctx=dom.getContext("2d");
var width=ctx.canvas.width;
var height=ctx.canvas.height;
var r=width/2;
var rem=width/200;
function drawBackground(){
ctx.save();
ctx.translate(r,r);//重新定义圆点到中心
ctx.beginPath();
ctx.lineWidth=10*rem;
ctx.arc(0,0,r-5*rem,0,Math.PI*2,false);//圆点坐标,起始角0,结束角2π,顺时针
ctx.stroke();
var hourNum=[3,4,5,6,7,8,9,10,11,12,1,2];//数组存小时数
ctx.font="18px Arial";
ctx.textAlign="center";
ctx.textBaseline="middle";
hourNum.forEach(function (num,i) {
var rad=2*Math.PI/12*i;//弧度
var x=(r-30*rem)*Math.cos(rad);
var y=(r-30*rem)*Math.sin(rad);
ctx.fillText(num,x,y);
});
for(var i=0;i<60;i++){//画圆点
var rad=2*Math.PI/60*i;
var x=(r-18*rem)*Math.cos(rad);
var y=(r-18*rem)*Math.sin(rad);
ctx.beginPath();
if(i%5==0){
ctx.fillStyle="#000";
ctx.arc(x,y,2,0,Math.PI*2,false);
}
else{
ctx.fillStyle="#ccc";
ctx.arc(x,y,2,0,Math.PI*2,false);
}
ctx.fill();
}
ctx.closePath();
}
function drawHour(hour,minute){//时针
ctx.save();
ctx.beginPath();
var rad=2*Math.PI/12*hour;
var mrad=2*Math.PI/12/60*minute;
ctx.rotate(rad+mrad);
ctx.lineWidth=6*rem;
ctx.moveTo(0,10*rem);
ctx.lineTo(0,-r/2);
ctx.lineCap="round";
ctx.stroke();
ctx.restore();
}
function drawMinute(minute,second){//分针
ctx.save();
ctx.beginPath();
var rad=2*Math.PI/60*minute;
var srad=2*Math.PI/60/60*second;
ctx.rotate(rad+srad);
ctx.lineWidth=3*rem;
ctx.moveTo(0,10*rem);
ctx.lineTo(0,-r+30*rem);
ctx.lineCap="round";
ctx.stroke();
ctx.restore();
}
function drawSecond(second){//秒针
ctx.save();
ctx.beginPath();
ctx.fillStyle="#c14543";
var rad=2*Math.PI/60*second;
ctx.rotate(rad);
ctx.moveTo(-2*rem,20*rem);
ctx.lineTo(2*rem,20*rem);
ctx.lineTo(1*rem,-r+18*rem);
ctx.lineTo(-1*rem,-r+18*rem);
ctx.fill();
ctx.restore();
}
function drawDot(){//画中心圆圈
ctx.beginPath();
ctx.fillStyle="#fff";
ctx.arc(0,0,3*rem,0,2*Math.PI,false);
ctx.fill();
}
function draw(){
ctx.clearRect(0,0,width,height);
var now=new Date();
var hour=now.getHours();
var minute=now.getMinutes();
var second=now.getSeconds();
drawBackground();//背景
drawHour(hour,minute);//小时
drawMinute(minute,second);//分钟
drawSecond(second);//秒钟
drawDot();//中心圆点
ctx.restore();
}
setInterval(draw,1000);
</script>
</body>
</html>
其中的rem值是为了使canvas画布大小变化时时钟的样式能够保持
希望本文所述对大家JavaScript程序设计有所帮助。
来源:https://blog.csdn.net/liona_koukou/article/details/70146105


猜你喜欢
- 1.定义ResNet残差模块一个block中,有两个卷积层,之后的输出还要和输入进行相加。因此一个block的前向流程如下:输入x→卷积层→
- python2.7wget http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tar.
- 本文实例讲述了ES6 Promise对象的应用。分享给大家供大家参考,具体如下:The Promise object represents
- 深度学习网络通常具有很深的层次结构,而且层与层之间通常会有并联、串联等连接方式。当使用PyTorch建立一个深度学习网络并输出文本向读者展示
- vm.$watch用法: vm.$watch( expOrFn, callback, [options] ) ,返回值为 unwatch 是
- 滑动拼图验证码可以算是滑块验证码的进阶版本,其验证机制相对复杂。本节将介绍两种滑动拼图验证码:初级版和高级版本。初级版滑块拼图验证码初级版滑
- 实际开发中,有时候系统提供的异常类型不能满足开发的需求。这时候你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception
- 用到的一些知识点:Flask-SQLAlchemy、Flask-Login、Flask-WTF、PyMySQL这里通过一个完整的登录实例来介
- FFmpeg 是视频处理最常用的开源软件。它功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes),也是许
- 迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法。1 算法原理迪杰斯特拉(Dijks
- 利用python查找电脑里的文件非常方便比如在我的电脑:D:\软件 文件夹里有非常非常多的软件。我忘记某个软件叫什么名字了,只记得文件名称里
- 如果你的Mysql数据库安装在centos7的系统上,并且你的操作系统启用了防火墙。应用要访问mysql数据库,你有2个解决方案。方案一:停
- Python读取YUV格式文件,并使用opencv显示的方法opencv可以读取的图片类型比较多,但大多是比较常见的类型,比如".
- 前言需要导入以下包,没有的通过pip安装import matplotlib.pyplot as pltimport cv2from PIL
- 前言本博客重点内容:reportlab生成流文件格式、reportlab分页和图片流文件写入reportlab等。我讲一下我这个需求的来源,
- ♩ 背景昨天在自己的 Laravel5.5 框架项目中,希望集成 Layer 的图片上传功能 但是在 ajax(POST) 提交请求时,一直
- 1,GallerificGalleriffic 是使用 Mike Alsup 的 jQuery Cycle plugin 创建的图片展示效果
- 测试的目录如下:root ├── module_root.py ├── package_a&
- py2exe在sourceforge 的下载只支持到2.7。针对python3.0+的版本,需要自己编译。1.下载源码svn checkou
- 本文python代码实现的是最小二乘法线性拟合,并且包含自己造的轮子与别人造的轮子的结果比较。问题:对直线附近的带有噪声的数据进行线性拟合,