效果图如下

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<canvas id="canvas" width="500" height="500"></canvas>
</body>
<script>
var canvas = document.getElementById("canvas");
var can = canvas.getContext("2d");
function drawClock(c){
c.clearRect(0,0,500,500);
var now = new Date();
var hours = now.getHours();
var minutes = now.getMinutes();
var seconds = now.getSeconds();
hours = hours>12?hours-12:hours;
hours = hours+minutes/60;
var time = now.toLocaleString();
console.log(hours,minutes,seconds);
c.beginPath();
c.lineWidth=8;
c.arc(250,250,200,0,Math.PI*2,false);
c.stroke(); for(var i=0;i<12;i++){
c.save();
c.lineWidth=5;
c.translate(250,250);//将起始位置移动到圆心。
c.rotate(i*30*Math.PI/180);//旋转,这里是画刻度的关键,画刻度的线条每次循环都在一个地方,但是画布旋转了。
                        就像切香肠时刀的落点不变,每次将香肠往前推。
c.beginPath();
c.moveTo(0,-180);
c.lineTo(0,-195);
c.closePath();
c.stroke();
c.restore();
}
for(var i=0;i<60;i++){
c.save();
c.lineWidth= 3;
c.translate(250,250);
c.rotate(6*i*Math.PI/180);
c.beginPath();
c.moveTo(0,-190);
c.lineTo(0,-195);
c.closePath();
c.stroke();
c.restore();
} //表盘中心
c.lineWith=1;
c.beginPath();
c.arc(250,250,4,0,360,false);
c.fill();
c.closePath(); //时针
c.save();
c.translate(250,250);
c.rotate(hours*30*Math.PI/180);
c.lineWidth = 7;
c.beginPath();
c.moveTo(0,15);
c.lineTo(0,-120);
c.stroke();
c.closePath();
c.restore(); //分针
c.save();
c.translate(250,250);
c.rotate(minutes*6*Math.PI/180);
c.lineWidth=3;
c.moveTo(0,15);
c.lineTo(0,-135);
c.stroke();
c.restore(); //秒针
c.save();
c.translate(250,250);
c.rotate(seconds*6*Math.PI/180);
c.lineWidth=1;
c.moveTo(0,15);
c.lineTo(0,-160);
c.stroke();
c.beginPath();
c.strokeStyle="red";
c.fillStyle="white";
c.arc(0,-145,5,0,180,false);
c.fill();
c.stroke();
c.closePath(); c.beginPath();
//判断秒数能否被5整除,能整除表示大刻度,反之为小刻度
if(seconds%5==0){
c.moveTo(0,-180);
c.lineTo(0,-195);
c.lineWidth=5;
}else{
c.moveTo(0,-190);
c.lineTo(0,-195);
c.lineWidth=3;
}
//当秒针走到某个刻度时,相应的边为红色。
c.strokeStyle="red";
c.stroke();
c.closePath();
c.restore(); //写时间
c.font="15px 黑体"
c.fillText(time,160,150);
}
setInterval("drawClock(can)",1000);
</script>
</html>

canvas画一个时钟的更多相关文章

  1. 深夜,用canvas画一个时钟

    深夜,用canvas画一个时钟 查看demo 这几天准备阿里巴巴的笔试,可以说已经是心力交瘁,自从阿里和蘑菇街的内推被刷掉之后,开始越来越怀疑起自己的能力来,虽然这点打击应该是微不足道的.毕竟校招在刚 ...

  2. 玩转html5(四)----使用canvas画一个时钟(可以动的哦!)

    先给个效果图,我画的比较丑,大家可以自己美化一下, 直接上代码: <!DOCTYPE html> <meta charset="utf-8"> <ht ...

  3. 用canvas画一个时钟

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 10分钟,利用canvas画一个小的loading界面

    首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" styl ...

  5. 用Canvas画一个刮刮乐

    Canvas 通过 JavaScript 来绘制 2D图形.Canvas 是逐像素进行渲染的.开发者可以通过javascript脚本实现任意绘图.Canvas元素是HTML5的一部分,允许脚本语言动态 ...

  6. 利用canvas画一个实时时钟

    先放一张效果图: 下面是源代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...

  7. 用canvas绘制一个时钟

    实现一个时钟的绘制和时间的显示 一,首先是页面的搭建html部分以及一点点的css代码,因为css这块用的比较少,所以就没有单独出来: <!DOCTYPE html> <html l ...

  8. 通过H5的新标签canvas做出一个时钟的全过程,希望对初学者有帮助

    最近学习了H5中的一个新标签canvas并且用它做出了一个时钟,最下面是成品图像,还不错吧,这只是我学习中的一个小demo,做得有点粗糙,但终究是做出来了,以后再写自己的网页主页再做一个好看点放上去. ...

  9. html5入门:教你用canvas写一个时钟

    今天的时间比较充裕,心血来潮,为大家分享一个html5的小例子,希望对刚学html5或者是没学html5正准备学的“童鞋们”展示一个小案例,希望对你们的学习有帮助!高手嘛!请跳过吧! 好了,闲话少数, ...

随机推荐

  1. 使用脚本监控windows服务的方法

    以下脚本可监控某一个windows服务,发现其停止就立即重启之. @echo off rem 定义循环间隔时间和监测的服务: set secs=60 set srvname="NetWin ...

  2. Arduino.最小系统面包板搭建

    最早试过用万用板做过最小系统,主要用来烧录芯片 后来为了方便,用面包板也搭了一个最小系统, 但不采用杜邦线,因为飞来飞去的线太乱了 因此就有了这个简洁的版本,先上个成品图 用个烧录器就可以很方便的烧写 ...

  3. LeetCode 216. Combination Sum III (组合的和之三)

    Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...

  4. Linux系列教程(七)——Linux帮助和用户管理命令

    上篇博客我们介绍了Linux文件搜索命令,其中find是用的最多的也是功能最强大的文件或目录搜索命令,和另一个搜索命令locate的区别是,find命令是全盘搜索,刚创建的文件也能搜索的到,而loca ...

  5. How to use VisualSVN Server and TortoiseSVN to host your codes and control your codes' version

    ###############################   PART ONE   ############################### #1. Introduction of the ...

  6. 基于netfilter和LVM的密码窃取

    一:要求: 编写一个基于netfilter的模块,该模块的功能是捕获如mail.ustc.edu.cn等使用明文传输用户名和密码的网站的用户名和密码:并在接收到特定的ICMP数据包之后将捕获的用户名和 ...

  7. IdentityServer4 指定角色授权(Authorize(Roles="admin"))

    1. 业务场景 IdentityServer4 授权配置Client中的AllowedScopes,设置的是具体的 API 站点名字,也就是使用方设置的ApiName,示例代码: //授权中心配置 n ...

  8. ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范

    IdentityServer实现以下规范: OpenID Connect OpenID Connect Core 1.0 (spec) OpenID Connect Discovery 1.0 (sp ...

  9. HTML5与搜索引擎优化[转载]

    原文:http://lusongsong.com/reed/398.html 我觉得HTML5的兴起完全是因为iPhone和iPad,自从Adobe停止开发flash.Android4.0不支持fla ...

  10. 自定义Base16加密

                                                                                              自定义Base16加 ...