①首先在HTML的body标签中添加一个canvas标签,用于绘制时钟。

<canvas id="myCanvas" width="600" height="300"></canvas>

②在JavaScript中通过getElementById函数得到Canvas对象,并创建画笔。

 var c=document.getElementById("myCanvas");
var cxt= c.getContext("2d");

③定义三个变量,slen表示秒针,mlen表示分钟,hlen表示时针,并分别赋值。

 var slen=60;
var mlen=50;
var hlen=40;

④开始绘制图形,设置填充色,以坐标点(200,150)为圆心,半径为100,起始弧度为0,终点弧度为360,绘制一个圆形

  cxt.beginPath();
cxt.strokeStyle="#00f";
//绘制一个以(200,150)为圆心,100为半径,起始弧度为0,终止弧度为360的圆
cxt.arc(200,150,100,0,2*Math.PI,true);
cxt.stroke();
cxt.closePath();

⑤重新开始绘制图形,将当前起始点移动到坐标点(200,150),并将当前坐标系逆时针旋转90;

cxt.beginPath();
cxt.translate(200,150); //平移当前起始点坐标
cxt.rotate(-Math.PI/2); //逆时针旋转90
cxt.save(); //保存当前路径

⑥通过一个算法完成绘制时钟时刻和数字,并且在每5个刻度后将当前坐标系顺时针旋转60

 //完成绘制时针刻度和数字,并且在每5个刻度后将当前坐标系顺时针旋转60度。
for(var i=0;i<60;i++){
if(i%5==0){
cxt.fillRect(80,0,20,5);
cxt.fillText(""+(i/5==0?12:i/5),70,0);
}else{
cxt.fillRect(90,0,10,2);
}
cxt.rotate(Math.PI/30);
}
cxt.closePath();

⑦定义三个变量,ls代表当前时间的秒,lm代表当前时间的分,lh代表当前时间的小时,并为其赋初始值0

  //ls当前时间的秒,lm当前的分,lh当前的小时
var ls= 0,lm= 0,lh=0;

⑧定义一个函数,该函数每秒执行一次,用于重新绘制时针、分针和秒针

        function Refresh(){
cxt.restore(); //恢复之前的状态
cxt.save(); //保存状态
cxt.rotate(ls * Math.PI / 30); //根据秒针旋转坐标
cxt.clearRect(5, -1, slen+1, 2+2); //清除秒针
cxt.restore(); //恢复之前的状态
cxt.save(); //保存状态
cxt.rotate(lm * Math.PI / 30); //根据分针旋转坐标
cxt.clearRect(5, -1, mlen+1, 3+2); //清除分针
cxt.restore();cxt.save(); cxt.rotate(lh * Math.PI / 6); //根据时针旋转坐标
cxt.clearRect(5, -3, hlen+1, 4+2); //清除秒针 var time = new Date(); //获取当前时间
var s = ls=time.getSeconds(); //获取秒
var m = lm=time.getMinutes(); //获取分
var h = lh=time.getHours(); //获取小时
cxt.restore();
cxt.save(); cxt.rotate(s * Math.PI / 30); //根据秒旋转坐标
cxt.fillRect(5, 0, slen, 2); //绘制秒针
cxt.restore(); cxt.save();
cxt.rotate(m * Math.PI / 30); //根据分旋转坐标
cxt.fillRect(5, 0, mlen, 3); //绘制分针
cxt.restore(); cxt.save();
cxt.rotate(h * Math.PI / 6); //根据时旋转坐标
cxt.fillRect(5, -2, hlen, 4); //绘制时针
}

⑨设置每秒钟刷新一次

/设置每秒刷新一次
var MyInterval = setInterval("Refresh();", 1000);
 <!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<canvas id="myCanvas" width="600" height="300"></canvas> <script type="text/javascript">
var c=document.getElementById("myCanvas");
var cxt= c.getContext("2d");
//定义三个变量分别是秒针,分针,时针
var slen=60;
var mlen=50;
var hlen=40; cxt.strokeRect(0,0, c.width, c.height); cxt.beginPath();
cxt.strokeStyle="#00f";
cxt.fillStyle="#00f";
cxt.arc(200,150,5,0,2*Math.PI,true);
cxt.fill();
cxt.closePath();
cxt.beginPath(); cxt.strokeStyle="#00f";
//绘制一个以(200,150)为圆心,100为半径,起始弧度为0,终止弧度为360的圆
cxt.arc(200,150,100,0,2*Math.PI,true);
cxt.stroke();
cxt.closePath();
//重新绘制,将当前起始点移动到坐标点(200,150),将当前坐标系逆时针旋转90
cxt.beginPath();
cxt.translate(200,150); //平移当前起始点坐标
cxt.rotate(-Math.PI/2); //逆时针旋转90
cxt.save(); //保存当前路径 //完成绘制时针刻度和数字,并且在每5个刻度后将当前坐标系顺时针旋转60度。
for(var i=0;i<60;i++){
if(i%5==0){
cxt.fillRect(80,0,20,5);
cxt.fillText(""+(i/5==0?12:i/5),70,0);
}else{
cxt.fillRect(90,0,10,2);
}
cxt.rotate(Math.PI/30);
}
cxt.closePath(); //ls当前时间的秒,lm当前的分,lh当前的小时
var ls= 0,lm= 0,lh=0;
function Refresh(){
cxt.restore(); //恢复之前的状态
cxt.save(); //保存状态
cxt.rotate(ls * Math.PI / 30); //根据秒针旋转坐标
cxt.clearRect(5, -1, slen+1, 2+2); //清除秒针
cxt.restore(); //恢复之前的状态
cxt.save(); //保存状态
cxt.rotate(lm * Math.PI / 30); //根据分针旋转坐标
cxt.clearRect(5, -1, mlen+1, 3+2); //清除分针
cxt.restore();cxt.save(); cxt.rotate(lh * Math.PI / 6); //根据时针旋转坐标
cxt.clearRect(5, -3, hlen+1, 4+2); //清除秒针 var time = new Date(); //获取当前时间
var s = ls=time.getSeconds(); //获取秒
var m = lm=time.getMinutes(); //获取分
var h = lh=time.getHours(); //获取小时
cxt.restore();
cxt.save(); cxt.rotate(s * Math.PI / 30); //根据秒旋转坐标
cxt.fillRect(5, 0, slen, 2); //绘制秒针
cxt.restore(); cxt.save();
cxt.rotate(m * Math.PI / 30); //根据分旋转坐标
cxt.fillRect(5, 0, mlen, 3); //绘制分针
cxt.restore(); cxt.save();
cxt.rotate(h * Math.PI / 6); //根据时旋转坐标
cxt.fillRect(5, -2, hlen, 4); //绘制时针
} //设置每秒刷新一次
var MyInterval = setInterval("Refresh();", 1000);
</script>
<div id="div1" style=" background:#00f;"></div>
</body>
</html>

Canvas绘制时钟的更多相关文章

  1. 使用canvas绘制时钟

    使用canvas绘制时钟  什么使canvas呢?HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.<canvas> 标签只是图 ...

  2. HTML5 之Canvas 绘制时钟 Demo

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

  3. html5 Canvas绘制时钟以及绘制运动的圆

    1.绘制时钟 <!-- js代码 --> <script type="text/javascript"> window.onload=function(){ ...

  4. 小任务之Canvas绘制时钟

    背景图的绘制(大圆.数字.小圆点) 掌握基础知识:圆的绘制(arc方法),关于圆的弧度的计算,数学中关于sin cos的用法 圆的弧度为2*Math.PI 12个数字分得弧度每个为2*Math.PI/ ...

  5. 用canvas绘制时钟

    用canvas做时钟其实很简单,下面是我做出的效果: 是不是还挺漂亮的? 下面上代码: html <div class="whole"> <canvas id=& ...

  6. HTML5 Canvas 绘制时钟

    网上会看到很多绘制的时钟,看代码也是云里雾里,自学了下Canvas,觉得不难,就自己做了一个. 先看一下截图: 比较简陋,但是该有的都有了,样式只加了个阴影. html代码就不贴了,就一个canvas ...

  7. 使用canvas绘制时钟 (http://heeroluo.net/Article/Detail/95)

    准备工作 在HTML中指定一个区域放置时钟: <div id="clock" style="position: relative;"></di ...

  8. canvas绘制时钟及注释及save和restore的用法

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

  9. 用canvas绘制一个简易时钟

    在见识了html5中canvas的强大,笔者准备制作一个简易时钟. 下面就是成果啦,制作之前我们先分析一下,绘制一个时钟需要做哪些准备. 一 . 1.首先这个时钟分为表盘,指针(时针,分针,秒针)和数 ...

随机推荐

  1. Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包

    子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中.   子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 ...

  2. exynos4412中断编程

    中断概述 我们知道,ARM核能处理的异常有7种,但仅仅区分异常的种类显然不能够满足需求.拿手机来说,触摸屏幕和按下音量键可能都是irq异常,但是ARM并不能将他们区分开,而事实的情况是针对这两种中断, ...

  3. 【推荐】CentOS安装Subversion-1.8.11+HTTP协议支持配置

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. 我们需要搭建一个自己的SVN服务器. 此外,搭建好的SVN服务器除了需要支持svn协议外,最好还需要支持HTTP协议和HTTPS协 ...

  4. [C]为什么发明指针?

    指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序 ...

  5. ActiveMQ笔记(6):消息延时投递

    在开发业务系统时,某些业务场景需要消息定时发送或延时发送(类似:飞信的短信定时发送需求),这时候就需要用到activemq的消息延时投递,详细的文档可参考官网说明,本文只介绍二种常用的用法: 注:本文 ...

  6. [LeetCode] Serialize and Deserialize BST 二叉搜索树的序列化和去序列化

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  7. [LeetCode] Decode String 解码字符串

    Given an encoded string, return it's decoded string. The encoding rule is: k[encoded_string], where ...

  8. [LeetCode] Word Ladder II 词语阶梯之二

    Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...

  9. 如何为Surface Dial设备开发自定义交互功能

    随着Surface Studio的发布,微软发布了与之相配套的外设硬件Surface Dial,用户可以将Surface Dail吸附在Surface Studio的屏幕上面,用旋转和点击的实体操作来 ...

  10. 5G系统架构

    原文标题:迈向5G之路,颠覆性的5G系统架构?   本文部分图片,资料摘自<迈向5G C-RAN:需求.架构与挑战> 突如一夜春风来,随着Polar码与LDPC码作为5G编码候选方案,通信 ...