h5+canvas绘制动画时钟

h5+canvas绘制动画时钟

效果图,这个是截图,可以动的,

代码如下:

<!DOCTYPE html>
<html>
<head>
<title>动画效果</title>
</head>

<body>
<canvas id="anm" width="600" height="600" style="border:1px solid gray"></canvas>
<script type="text/javascript">
//绘制时钟
function drawClock() {
var now = new Date();
var hour = now.getHours(), m = now.getMinutes(), s = now
.getSeconds();
hour = hour >= 12 ? hour - 12 : hour;
var c = document.getElementById("anm");
var ctx = c.getContext("2d");
//初始化save() 方法
ctx.save();
//首先清除画布,否则会重叠绘制
ctx.clearRect(0, 0, 400, 400);
//重新映射画布上的(0,0)位置
ctx.translate(140, 140);
//选择画布角度 因为默认的角度0° 是向右,而我们要的0点时候要在上方,逆时针旋转90度得到
ctx.rotate(-Math.PI / 2);
//设置路径颜色
ctx.strokeStyle = "red";
//设置线的宽度
ctx.lineWidth = 2;
//向线条的每个末端添加正方形线帽
ctx.lineCap = "square";
//保存当前状态
ctx.save();
//绘制小时刻度
ctx.beginPath();
for (var i = 0; i < 12; i++) {
ctx.rotate(30 * Math.PI / 180);
ctx.moveTo(110, 0);
ctx.lineTo(120, 0);
}
ctx.stroke();
//取出保存的画布状态进行融合
ctx.restore();
//保存当前的画布状态
ctx.save();
//画分钟刻度
ctx.beginPath();
for (var i = 0; i < 60; i++) {
ctx.rotate(6 * Math.PI / 180);
ctx.moveTo(117, 0);
ctx.lineTo(120, 0);
}
ctx.stroke();
ctx.restore();
ctx.save();
//画时针
ctx.beginPath();
ctx.rotate((30 * Math.PI / 180) * (hour + m / 60 + s / 3600));
ctx.lineWidth = 5;
ctx.moveTo(0, 0);
ctx.lineTo(60, 0);
ctx.strokeStyle = "#000000";
ctx.stroke();
ctx.restore();
ctx.save();
//画分针
ctx.beginPath();
ctx.rotate((6 * Math.PI / 180) * (m + s / 60));
ctx.lineWidth = 3;
ctx.moveTo(0, 0);
ctx.lineTo(75, 0);
ctx.strokeStyle = "#1ca112";
ctx.stroke();
ctx.restore();
ctx.save();
//画秒针
ctx.beginPath();
ctx.rotate((6 * Math.PI / 180) * s);
ctx.lineWidth = 1;
ctx.moveTo(0, 0);
ctx.lineTo(90, 0);
ctx.strokeStyle = "#ff6b08";
ctx.stroke();
ctx.restore();
ctx.save();
//画外圈
ctx.beginPath();
ctx.lineWidth = 2;
ctx.strokeStyle = "#fc4e19";
ctx.arc(0, 0, 125, 0, 2 * Math.PI);
ctx.stroke();
ctx.restore();
ctx.save();
//返回到初始化状态
ctx.restore();
ctx.restore();
}
//页面加载事件
window.onload = function() {
//每秒钟绘制一次时钟
setInterval(drawClock, 1000);
};
</script>
</body>
</html>

总结:

有几个方法需要注意:

1,ctx.save();ctx.restore();两个方法用于复杂图形的绘画,

2,ctx.translate(140, 140);将(140,140)设为相对参考原点(0,0)

3,ctx.rotate(-Math.PI / 2);旋转角度,因为0°角是右边,我们需要0点时候角度是-90°,所以将角度旋转逆时针90°

4,setInterval(drawClock, 1000); 这个是每秒中重载一次绘制函数,其实把1000设置成1000以下仍然是这个效果,因为重绘的依据是根据时间now来得到m,s,与这个setInterval(drawClock, 1000);的重绘时间没关系,

时间: 2024-10-25 05:47:37

h5+canvas绘制动画时钟的相关文章

使用canvas绘制动画时钟

一代码 <!DOCTYPE html > <head> <meta charset="UTF-8" > <title>绘制动态时钟</title> <script type="text/javascript"> var canvas; var context; function window_onload() { canvas = document.getElementById("ca

H5 canvas绘制出现模糊的问题

在之前做移动端小游戏幸运转盘.九宫格转盘,使用到了 canvas ,也是第一次在项目中使用 canvas 来实现. 近期测试人员反应 canvas 绘制的内容太模糊,心想着用 canvas 绘制出来的怎么会模糊,先前也有考虑到适配不同尺寸的移动设备,担心直接使用 img 或者设置 background 会使图片拉伸而变得模糊,所以使用 canvas 来绘制转盘与九宫格,精确的计算每个物体所在的坐标以及尺寸绘制出来的,怎么会模糊. 然而将绘制的内容与页面中的其他文字或者图片作对比后,发现使用 ca

HTML5 Canvas绘制实时时钟

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>try to draw the colock</title> <script src="js/modernizr-1.7.js"></script> <script type="text/javascript"> wind

应用canvas绘制动态时钟--每秒自动动态更新时间

使用canvas绘制时钟 下文是部分代码,完整代码参照:https://github.com/lemoncool/canvas-clock,可直接下载. 首先看一下效果图:每隔一秒会动态更新时间 一.前期准备 1. HTML中准备一个容器存放画布,并为其设置width,height. <div> <canvas id="clock" height="200px" width="200px"></canvas>

H5 canvas圆形的时钟

今天用H5中的canvas标签做一个时钟,H5中有很多好用的新增标签,真的很不错. 1.canvas标签介绍 <canvas> 标签定义图形,比如图表和其他图像,你必须使用脚本来绘制图形.在画布上(Canvas)画一个红色矩形,渐变矩形,彩色矩形,和一些彩色的文字. HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.不过不是所有的浏览器都支持这个标签的,支持的有谷歌4.0,ie9.0,火狐2.0等. 2.时钟的绘制第一步 在html中

canvas绘制指针时钟

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>canvas时钟</title> </head> <body> <canvas id="c" width="300" height="300"></canv

用canvas绘制一个时钟

实现一个时钟的绘制和时间的显示 一,首先是页面的搭建html部分以及一点点的css代码,因为css这块用的比较少,所以就没有单独出来: <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>时钟</title>    <style type="text/css">    

canvas绘制动画效果

绘制一个笑脸,实现笑脸的左右匀速运动 html代码: <canvas id="myCanvas" width="400px" height="400px"></canvas> js代码: <script type="text/javascript"> function $(id) { return document.getElementById(id); } var i=0,j=300,t;

[Canvas学习]动画

学习目的:通过JavaScript操控<canvas>对象,实现交互动画. 动画的基本步骤 1. 清空canvas,使用clearRect方法 2. 保存canvas状态 3. 绘制动画图形 4. 恢复canvas状态 操控动画Controlling an animation setInterval(function, delay) setTimeout(function, delay) requestAnimationFrame(callback) 太阳系运动的小例子 <canvas