显示效果如下

源码如下:

<!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>Document</title>
<style>
* {
margin: 0;
padding: 0;
} body {
width: 100%;
height: 100%;
overflow: hidden;
background-color: gray;
} #clock {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background-color: #fff;
}
</style>
</head> <body>
<canvas id="clock" width="400" height="400"></canvas> <script>
window.onload = function () {
var canvas = document.querySelector("#clock"); if (canvas.getContext) {
var ctx = canvas.getContext("2d");
move();
setInterval(move, 1000);
function move() {
ctx.clearRect(0, 0, canvas.width, canvas.height); // 清除画布
ctx.save();
// 初始化样式
ctx.translate(200, 200);
ctx.rotate(-90 * Math.PI / 180);
ctx.lineWidth = "8";
ctx.strokeStyle = "black";
ctx.lineCap = "round";
ctx.beginPath(); // 外层空心圆盘
ctx.save();
ctx.lineWidth = 14;
ctx.strokeStyle = "#325FA2";
ctx.beginPath();
ctx.arc(0, 0, 140, 0, 360 * Math.PI / 180);
ctx.stroke();
ctx.restore(); // 时针刻度
ctx.save();
ctx.beginPath();
for (var i = 0; i < 12; i++) {
ctx.rotate(30 * Math.PI / 180);
ctx.moveTo(120, 0);
ctx.lineTo(100, 0); }
ctx.stroke();
ctx.restore(); // 分针刻度
ctx.save();
ctx.lineWidth = 3;
ctx.beginPath();
for (var i = 0; i < 60; i++) {
if (i % 5 != 0) {
ctx.moveTo(120, 0);
ctx.lineTo(117, 0);
}
ctx.rotate(6 * Math.PI / 180);
}
ctx.stroke();
ctx.restore(); // 时针、分针、秒针、钟座
var date = new Date();
var s = date.getSeconds();
var m = date.getMinutes() + s / 60;
var h = date.getHours() + m / 60;
h = h > 12 ? h - 12 : h; // 时针
ctx.save();
ctx.lineWidth = 14;
ctx.rotate(h * 30 * Math.PI / 180);
ctx.beginPath();
ctx.moveTo(-20, 0);
ctx.lineTo(80, 0);
ctx.stroke();
ctx.restore(); //分针
ctx.save();
ctx.lineWidth = 10;
ctx.rotate(m * 6 * Math.PI / 180);;
ctx.beginPath();
ctx.moveTo(-28, 0);
ctx.lineTo(112, 0);
ctx.stroke();
ctx.restore(); // 秒针
ctx.save();
ctx.lineWidth = 6;
ctx.strokeStyle = "#D40000";
ctx.fillStyle = "#D40000";
ctx.rotate(s * 6 * Math.PI / 180);
ctx.beginPath();
ctx.moveTo(-30, 0);
ctx.lineTo(83, 0);
ctx.stroke();
// 中心实心圆盘
ctx.beginPath();
ctx.arc(0, 0, 10, 0, 360);
ctx.fill(); // 秒针针头
ctx.beginPath();
ctx.arc(96, 0, 10, 0, 360);
ctx.stroke();
ctx.restore(); ctx.restore();
} }
}
</script>
</body> </html>

canvas时钟demo的更多相关文章

  1. HTML5 之Canvas 绘制时钟 Demo

    <!DOCTYPE html> <html> <head> <title>Canvas 之 时钟 Demo</title> <!--简 ...

  2. Coffeescript实现canvas时钟

    前言 参照Mozilla 官方教程,要在Canvas上画动画时钟,思路非常有意思. 把动画看作是多个帧组成,定时每个时间点在Canvas上画一帧来实现动画.而Mozilla 官方教程画图实现的思路有意 ...

  3. 》》canvas时钟

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. 原生js之canvas时钟组件

    canvas一直是前端开发中不可或缺的一种用来绘制图形的标签元素,比如压缩上传的图片.比如刮刮卡.比如制作海报.图表插件等,很多人在面试的过程中也会被问到有没有接触过canvas图形绘制. 定义 ca ...

  5. canvas写的一个小时钟demo

    <!DOCTYPE html> <html> <head> <title>HTML5 Canvas Demo of clock</title> ...

  6. 移动端上传照片 预览+Draw on Canvas's Demo(解决 iOS 等设备照片旋转 90 度的 bug)

    背景: 本人的一个移动端H5项目,需求如下: 需求一:手机相册选取或拍摄照片后在页面上预览 需求二:然后绘制在canvas画布上 这里,我们先看一个demo(http://jsfiddle.net/q ...

  7. HTML5之Canvas时钟(网页效果--每日一更)

    今天,带来的是使用HTML5中Canvas标签实现的动态时钟效果. 话不多说,先看效果:亲,请点击这里 众所周知,Canvas标签是HTML5中的灵魂,HTML5 Canvas是屏幕上的一个由Java ...

  8. Canvas - 时钟绘制

    导语:距离上一次写canvas,已经过去两年半,如今业务需要,再次拾起,随手记录. [思考] 时钟的绘制主要在于圆的绘制:1. 使用context.arc()方法直接绘制圆或圆弧: 2. 使用圆的方程 ...

  9. 一个canvas的demo

    该demo放于tomcat下运行,否则出现跨域错误 <!DOCTYPE html> <html> <head> <meta charset="utf ...

随机推荐

  1. verilog中function的使用

    函数的功能和任务的功能类似,但二者还存在很大的不同.在 Verilog HDL 语法中也存在函数的定义和调用. 1.函数的定义 函数通过关键词 function 和 endfunction 定义,不允 ...

  2. Hive中使用Python实现Transform时遇到Broken pipe错误排查

    Hive中有一表,列分隔符为冒号(:),有一列utime是Timestamp格式,需要转成Weekday存到新表. 利用Python写一个Pipeline的Transform,weekday.py的代 ...

  3. netflix vector 系统性能监控安装使用

    说明本次安装使用docker   1. vector 安装 docker run -d --name vector -p 80:80 netflixoss/vector:latest   2. 依赖的 ...

  4. JAVA反射调用方法

    1.用户类 package com.lf.entity; import com.lf.annotation.SetProperty; import com.lf.annotation.SetTable ...

  5. 浅谈Sql各种join的用法

    1.left join.right join.inner join三者区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右 ...

  6. js判断客户端是pc还是手机

    function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", " ...

  7. css中伪类和伪元素的区别

    转载:http://www.cnblogs.com/ihardcoder/p/5294927.html CSS3伪类和伪元素的特性和区别   前端er们大都或多或少地接触过CSS伪类和伪元素,比如最常 ...

  8. nodejs中的util.inspect.js

    util.inspect(object,[showHidden],[depth],[colors])是一个将任意对象转换 为字符串的方法,通常用于调试和错误输出.它至少接受一个参数 object,即要 ...

  9. C# winform开发

    一处消息死锁分析 最近维护一个工控机上运行的winform程序,我的前任在一个弹出窗口(窗口B)里面调用了ShowDialog方法弹出对话框(窗口C),导致了一个问题是有时关闭窗口C时windows假 ...

  10. java事件监听机制2

    今天早上的两点收获: 1.addActionListener(其中的setActionCommand函数就是要对对象进行唯一性的标记,便于消息传来后进行处理.理论上actionlistener可以全部 ...