canvas绘制简易时钟
时钟绘制的非常简易,但该有的都有了。
效果图如下,

<!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绘制简易时钟的更多相关文章
- canvas绘制表盘时钟
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- canvas绘制简易动画
在canvas画布中制作动画相对来说很简单,实际上就是不断变化的坐标.擦除.重绘的过程 1.使用setInterval方法设置动画的间隔时间. setInterval(code,millisec) s ...
- 使用canvas绘制一个时钟
周末学习canvas的一些基础功能,顺带写了一个基础的时钟.现在加工一下,做的更好看一点,先放上效果图: 谈一些自己的理解: (1).要绘制一个新的样式(不想被其他样式影响,或者影响到其他样式),那么 ...
- 用canvas绘制一个时钟
实现一个时钟的绘制和时间的显示 一,首先是页面的搭建html部分以及一点点的css代码,因为css这块用的比较少,所以就没有单独出来: <!DOCTYPE html> <html l ...
- 应用canvas绘制动态时钟--每秒自动动态更新时间
使用canvas绘制时钟 下文是部分代码,完整代码参照:https://github.com/lemoncool/canvas-clock,可直接下载. 首先看一下效果图:每隔一秒会动态更新时间 一. ...
- html5、canvas绘制本地时钟
效果图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- canvas实现简易时钟效果
代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...
- 使用canvas绘制时钟
使用canvas绘制时钟 什么使canvas呢?HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.<canvas> 标签只是图 ...
- 用canvas绘制一个简易时钟
在见识了html5中canvas的强大,笔者准备制作一个简易时钟. 下面就是成果啦,制作之前我们先分析一下,绘制一个时钟需要做哪些准备. 一 . 1.首先这个时钟分为表盘,指针(时针,分针,秒针)和数 ...
随机推荐
- js,jq,css选择器
js获取节点: var chils= s.childNodes; //得到s的全部子节点 var par=s.parentNode; //得到s的父节点 var ns=s.nextSbiling; / ...
- 替换Jar包里文件
jar uvf test.jar com/test/test.class 这里值得注意的是 test.class 必须放在com/test 文件下,要和jar的路径对应起来.不然会说 没有这个文件或 ...
- PermGen space
MyEclipse内存空间不足,调整空间操作: 1.点击"Run"-"Run Configurations",在打开的窗口中点击"Arguments& ...
- InvokeRequired 线程间访问
zt: http://www.x2blog.cn/jinhong618/?tid=22389 问: f (this.InvokeRequired) { ...
- Windows平台手动卸载Oracle Server【完整+干净】
使用Oracle自带的Universal Installer卸载存在问题: 不干净,不完全,还有一些注册表残留,会影响到后来的安装. 所以,推荐使用手工卸载Oracle. 1.[win+R]-> ...
- Shell_2 语句
1 if else fi if 语句通过关系运算符判断表达式的真假来决定执行哪个分支.Shell 有三种 if ... else 语句: if ... fi 语句: if ... else ... f ...
- 多线程之信号量(By C++)
信号量在多线程中,主要是用于线程的同步或者限制线程运行的数量. 所谓同步,当流程1运行在线程1中,流程2运行在线程2中,流程2必须在流程1结束之后才能开始执行.你会怎么做,所有就需要给出一个流程1结束 ...
- continue语句在for语句和while语句中的区别
while语句的形式: while( expression ) statement for语句的形式: for( expression1; expression2;expression3 ) // ...
- AC自动机+DP HDOJ 2457 DNA repair(DNA修复)
题目链接 题意: 给n串有疾病的DNA序列,现有一串DNA序列,问最少修改几个DNA,能使新的DNA序列不含有疾病的DNA序列. 思路: 构建AC自动机,设定end结点,dp[i][j]表示长度i的前 ...
- 将Unreal4打包后的工程嵌入到Qt或者桌面中
#include "widget.h" #include "ui_widget.h" #include "windows.h" #inclu ...