时钟绘制的非常简易,但该有的都有了。

效果图如下,

 <!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>clock</title>
<style>
body{
background: #ddd;
}
#canvas {
margin: 10px;
padding: 10px;
background: #fff;
border: thin inset #aaa;
}
</style>
</head>
<body>
<canvas id="canvas" width="300" height="300"></canvas>
<script src="Example2-1.js"></script>
</body>
</html>

HTML代码

 var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
var FONT_HEIGHT = 15;
var MARGIN = 35;
var HAND_TRUNCATION = canvas.width/25;
var HOUR_HAND_TRUNCATION = canvas.width/10;
var NUMERAL_SPACING = 20;
var RADIUS = canvas.width/2 - MARGIN;
var HAND_RADIUS = RADIUS + NUMERAL_SPACING; //绘制圆形
function drawCircle(){
context.beginPath();
context.arc(canvas.width/2,canvas.height/2,RADIUS,0,Math.PI*2,true);
//(圆心x坐标,圆心y坐标,半径,起点角,终点角,绘制方向(顺/逆))
context.stroke();
} //绘制时刻数字
function drawNumberals(){
var numerals = [1,2,3,4,5,6,7,8,9,10,11,12],angle = 0,numeralWidth = 0;
numerals.forEach(function(numeral){
angle = Math.PI/6 * (numeral-3);
numeralWidth = context.measureText(numeral).width;
context.fillText(numeral,
canvas.width/2 + Math.cos(angle) * (HAND_RADIUS) - numeralWidth/2,
canvas.height/2 + Math.sin(angle) * (HAND_RADIUS) + FONT_HEIGHT/3);
});
} //画圆心
function drawCenter(){
context.beginPath();
context.arc(canvas.width/2,canvas.height/2,5,0,Math.PI*2,true);
context.fill();
} //画指针
function drawHand(loc,isHour){
var angle = (Math.PI/2) * (loc/15)- Math.PI/2,
handRadius = isHour ? RADIUS -HAND_TRUNCATION -HOUR_HAND_TRUNCATION : RADIUS -HAND_TRUNCATION;
context.moveTo(canvas.width/2,canvas.height/2);
context.lineTo(canvas.width/2 + Math.cos(angle) * handRadius,canvas.height/2 + Math.sin(angle) * handRadius);
context.stroke();
} function drawHands(){
var date = new Date,
hour = date.getHours();
hour = hour > 12 ? hour - 12 : hour; drawHand(hour*5 + (date.getMinutes()/60)*5,true);
drawHand(date.getMinutes(),false);
drawHand(date.getSeconds(),false);
} function drawClock(){
context.clearRect(0,0,canvas.width,canvas.height); //清空画布 drawCircle();
drawCenter();
drawHands();
drawNumberals()
} //初始化
context.font = FONT_HEIGHT + 'px Arial';
loop = setInterval(drawClock,1000); //1s刷新一次

JS代码

canvas绘制简易时钟的更多相关文章

  1. canvas绘制表盘时钟

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

  2. canvas绘制简易动画

    在canvas画布中制作动画相对来说很简单,实际上就是不断变化的坐标.擦除.重绘的过程 1.使用setInterval方法设置动画的间隔时间. setInterval(code,millisec) s ...

  3. 使用canvas绘制一个时钟

    周末学习canvas的一些基础功能,顺带写了一个基础的时钟.现在加工一下,做的更好看一点,先放上效果图: 谈一些自己的理解: (1).要绘制一个新的样式(不想被其他样式影响,或者影响到其他样式),那么 ...

  4. 用canvas绘制一个时钟

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

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

    使用canvas绘制时钟 下文是部分代码,完整代码参照:https://github.com/lemoncool/canvas-clock,可直接下载. 首先看一下效果图:每隔一秒会动态更新时间 一. ...

  6. html5、canvas绘制本地时钟

    效果图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  7. canvas实现简易时钟效果

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

  8. 使用canvas绘制时钟

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

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

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

随机推荐

  1. js如何求一组数中的极值

    这是一个很简单的问题,现在我们从循环开始,例如一组数[5,2,1,3,4];求其中的最大值,那么首先我们要定义一个max的中间变量,遍历数组,当遇到比max值大则赋值给max,直到循环结束,就能获取这 ...

  2. android UI控件小记

    1.关于text和drawableTop之类的间距 android:drawablePadding="10dp" 2.EditText属性 android:phoneNumber= ...

  3. 文件上传之 HttpPostedFile

    HttpPostedFile类,提供对客户端已上载的单独文件的访问. 公共属性如下: SaveAs()方法,用于保存上传文件的内容. 用法为: #region 文件上传 /// <summary ...

  4. ThreadStart 与ParameterizedThreadStart的区别

    1) ParameterizedThreadStart与ThreadStart 1 static void Main(string[] args) { #region ParameterizedThr ...

  5. DBCP连接池

    方法一: package DBCPUtils; import java.util.List;import java.util.Properties; import javax.sql.DataSour ...

  6. 数据分析师的福音——VS 2017带来一体化的数据分析开发环境

    (此文章同时发表在本人微信公众号“dotNET开发经验谈”,欢迎右边二维码来关注.) 题记:在上个月的Connect() 2016大会上,微软宣布了VS 2017 RC的发布,其中为数据分析师带来了一 ...

  7. 将一个实体数据保存到不同的数据表中<EntityFramework6.0>

    2014-11-22声明方式 public class Product { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public ...

  8. 一些linux命令

    1. more 慢慢查看文件2. mkdir -p 递归的创建目录3. tree 4. ls -lh 人性化显示

  9. 在Javascript中onclick()方法应用

    <html> < head> < script type="text/javascript"> function onclick1(){ ale ...

  10. 分布式平台Spark环境的搭建

    1.安装Spark之前需要先安装Java,Scala及Python(个人喜欢用pyspark,当然你也可以用原生的Scala) 首先安装Java jdk: 我们可以在Oracle的官网下载Java S ...