第一次在博客园注册发博。有一次去人家单位开标,看到开标网站上有个钟表动画,一时兴起,就写了个简单的钟表动画。

用js和html5 canvas对象实现一个简单钟表程序

主要用到的就是h5的canvas对象

canvas对象本人也不是很熟,大致看了几个常用的方法,难免有不足之处,仅是练习所用。

实现思路:画表盘,画刻度,画表针就是这么个思路。

主要就涉及到以下几个方法

arc 创建弧/曲线(用于创建圆形或部分圆)

rotate 旋转

lineTo画线

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Js实现一个简单的钟表动画</title>
<style type="text/css">
canvas{ margin-left:500px;
margin-top:100px; } </style>
</head> <body>
<canvas id="canvas" width="600" height="600"></canvas>
<script language="javascript">
/*
作者:胖兔
时间:2017.8.9
描述:用js和html5 canvas对象实现一个简单钟表程序
*/ var Canvas = { //属性
Context:document.getElementById("canvas").getContext('2d'), //擦除
Clear:function(){ var cxt = Canvas.Context;
var width = cxt.canvas.width;
var height = cxt.canvas.height;;
this.Context.clearRect(0,0, width, height);
},
//radius钟表半径,sencondScaleWidth刻度长度,secondHandWidth秒针长度
CreateClock:function(radius,sencondScaleWidth,secondHandWidth){
var me = this;
var radius = radius;
var sencondScaleWidth = sencondScaleWidth;
var secondHandWidth = secondHandWidth;
//小时刻度
var hourScaleWidth = sencondScaleWidth*2;
//时针分针长度
var hourHandWidth = secondHandWidth*80/100;
//分针长度
var minuteHandWidth = secondHandWidth*90/100;
//确定圆心坐标
var point = {x:this.Context.canvas.width/2,y:this.Context.canvas.height/2};
var ctx = this.Context;//获取上下文
//绘制圆圈 function drawCircle(){ ctx.save();//记录画笔状态
//确定画笔的位置在圆心点
ctx.translate(point.x,point.y);
//ctx.fillStyle = "black";
ctx.strokeStyle="gray";
ctx.lineWidth = 2;
ctx.beginPath();//开始绘制路径
ctx.arc(0,0,radius,0,Math.PI*2);
ctx.closePath();//关闭路径
ctx.stroke();//绘制
ctx.restore();//复位 }
//绘制刻度
function drawScale(){
ctx.save();//记录画笔状态
var perHourRadian = Math.PI/6;
var perMinuteRadian = Math.PI/30;
//确定画笔的位置在圆心点
ctx.translate(point.x,point.y);
ctx.strokeStyle="gray"; //此处为了省事,只在表盘上简单的写了几个时间数字
ctx.font = "bold 30px impack"
var dc = radius-hourScaleWidth-30;
ctx.fillText("3", dc, 10);
ctx.fillText("6", -10,dc );
ctx.fillText("9", -dc, 10);
ctx.fillText("12", -15, -dc);
ctx.stroke(); for(var i=0;i<12;i++){
//坐标旋转
ctx.rotate(perHourRadian);
ctx.moveTo(radius-hourScaleWidth,0);
ctx.lineTo(radius,0);
} for(var i=0;i<60;i++){
//坐标旋转
ctx.rotate(perMinuteRadian);
ctx.moveTo(radius-sencondScaleWidth,0);
ctx.lineTo(radius,0);
} ctx.stroke();//绘制
ctx.restore(); //radian
}
//drawScale();
function drawHand(){ var myDate = new Date();
var curHour = myDate.getHours();
var curMinute = myDate.getMinutes();
var curSecond = myDate.getSeconds(); //绘制时针
curHour = curHour>12?curHour-12:curHour;
var hourRadian = (curHour+curMinute/60+curSecond/3600) * (Math.PI/6);
//绘制分针
var minuteRadian = (curMinute+curSecond/60) * (Math.PI/30);
//绘制秒针
var secondRadian = curSecond * (Math.PI/30); function run(radian,width,color){
ctx.save();
ctx.translate(point.x,point.y);
ctx.rotate(-Math.PI/2);
ctx.strokeStyle=color
ctx.beginPath();
ctx.rotate(radian);
ctx.moveTo(0,0);
ctx.lineTo(width,0);
ctx.closePath();
ctx.stroke();
ctx.restore();
}
run(hourRadian,hourHandWidth,"black");
run(minuteRadian,minuteHandWidth,"green");
run(secondRadian,secondHandWidth,"red"); }
//drawHand();
function drawAll(){
me.Clear();
drawCircle();
drawScale();
drawHand();
}
setInterval(drawAll,1000); } }; Canvas.CreateClock(290,20,200); </script>
</body>
</html>

js实现一个简单钟表动画(javascript+html5 canvas)的更多相关文章

  1. 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”

    这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...

  2. JS实现一个简单的计算器

    使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择 ...

  3. JS事件 编程练习-自制计算器 使用JS完成一个简单的计算器功能。实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除。

    编程练习 使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除. 提示:获取元素的值设置和获取方法为:例:赋值:document.getElement ...

  4. 用JS做一个简单的电商产品放大镜功能

    使用js制作一个简单的产品放大图 购物网站的产品页经常会放有一个产品展示图区.该图区有一个功能就是产品图的放大功能,移动左侧的焦点区域,可以放大细节部分观看,详情如下图.实现该功能的方法也非常简单. ...

  5. 高性能动画!HTML5 Canvas JavaScript框架KineticJS

    高性能动画!HTML5 Canvas JavaScript框架KineticJS KineticJS是一款开源的HTML5 Canvas JavaScript框架,能为桌面和移动应用提供高性能动画,并 ...

  6. php+js实现一个简单的用户管理系统

    php + js 实现一个简单的用户管理系统 说实话,我对PHP是抵触的,但是我们的WEB课程刚好学的就是这个,不得已看了看,下面是用PHP实现的一个简单的用户管理系统. 我们首先来看一下目录结构 a ...

  7. JavaScript+html5 canvas实现本地截图教程

    这篇文章主要介绍了JavaScript+html5 canvas实现本地截图教程,对截图功能感兴趣的小伙伴们可以参考一下 最近有时间了解了下html5的各API,发现新浪微博的头像设置是使用canva ...

  8. Three.js构造一个简单的房间

    主要研究three.js在3D场景中基本使用:画一个简单的房子.房子上画门和玻璃.房间内放一个床.定义鼠标事件可以移动场景.动画的使用等. 1.Three.js画的一个简单的房子,模拟地板以及四堵墙 ...

  9. 学习用node.js建立一个简单的web服务器

    一.建立简单的Web服务器涉及到Node.js的一些基本知识点: 1.请求模块 在Node.js中,系统提供了许多有用的模块(当然你也可以用JavaScript编写自己的模块,以后的章节我们将详细讲解 ...

随机推荐

  1. could not get next sequence value

    1.触发事件 在电脑A上敲项目代码,数据库原始资料是直接使用别人写好的sql导入(建表和导入表数据等): 将电脑A上数据库的资料,使用PL/SQL Developer导出项目中所用表(此时未导出Ora ...

  2. webservice07#契约优先#webservice实现简单的动态web项目

    1, 用户管理 User{username,password,nickname} 属性. 2,契约优先[ 先用schema做标准来写wsdl.再生成服务器端的接口,再编写接口的类] 在src下创建目录 ...

  3. Tomcat代码执行漏洞(CVE-2017-12615)的演绎及个人bypass

    0x00 漏洞简介 2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞. 漏洞CVE编号:CVE-2017-12615和CVE-2017-12616. 其中 远程代码执行漏洞 ...

  4. const在c和c++中的不同

    最近开始由学习c转到c++:从面向过程到面向对象的转变中,总是以面向过程的思路思考,发现有很多的不同,今天就稍微发表一下我的见解,如果那里出错,希望大神可以帮忙指出来. 首先是const : 在C语法 ...

  5. Java代理和动态代理

    code from <Thinking in java> 代理模式 interface Interface { void doSomething(); void somethingElse ...

  6. ios小型服务器环境配置

    之前买的一台二手iphone4退役了,上闲鱼上一看,就值200,而且耳机声音也有点轻,估计买不了什么钱 于是网上看看能不能有什么废物利用的法子,看到说做行车记录仪的,有说做git服务器的,感觉挺有兴趣 ...

  7. TeamFlowy——结合Teambition与Workflowy提高生产力

    Teambition是一个跨平台的团队协作和项目管理工具,相当于国外的Trello.使用Teambition可以像使用白板与便签纸一样来管理项目进度,如下图所示. Teambition虽然便于管理项目 ...

  8. hdu1512 Monkey King(左偏树 + 并查集)

    Once in a forest, there lived N aggressive monkeys. At the beginning, they each does things in its o ...

  9. linux视频之media媒体框架

    linux视频媒体(kernel层分析)主要包括三个文件: (/drivers/media/media-device.c ,  /drivers/media/media-devnode.c , /dr ...

  10. SQLServer中重建聚集索引之后会影响到非聚集索引的索引碎片吗

    本文出处:http://www.cnblogs.com/wy123/p/7650215.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...