用canvas模仿iPhone时钟

自学前段开发也有一个月了,最近在学html5中的新标签“canvas”,发现canvas不仅仅是一个标签,更是一个能够制作动画效果的画布,于是模仿iPhone中时钟的效果,自己做了一个网页版的时钟,还只是一个雏形,以后还会增加一些自己的创意“抛弃圆形表盘”,“数字用图片或其它形状呈现”,“时针、分钟、秒针也用其它形状代替”,以我现在的基础也许还没有能力做出来,不过我会努力的。

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>炫丽的倒计时效果</title>
</head>
<body>
<canvas id="canvas" style="display: block; margin:50px auto;">
您的浏览器不支持canvas绘图,请更换浏览器。
</canvas>

<script type="text/javascript">
var WINDOW_WIDTH=400;
var WINDOW_HEIGHT=400;

window.onload=function(){

var canvas=document.getElementById("canvas");
if(canvas.getContext("2d")){

var context=canvas.getContext("2d");

}
canvas.width=WINDOW_WIDTH;
canvas.height=WINDOW_HEIGHT;

render(context);
};

function numberToDegree(num){

return ((num*6-90)*2*Math.PI/360);
}

function computePositionByLenghtAndDegree(len,deg){

return {
x:len*Math.cos(deg),
y:len*Math.sin(deg)
}

}

function render(cxt){
var myDate=new Date();
var hour=myDate.getHours()%12;
var minute=myDate.getMinutes();
var second=myDate.getSeconds();

//cxt.clearRect(0,0,cxt.canvas.width,cxt.canvas.height);

//绘制表盘

cxt.fillStyle="#000000";
cxt.beginPath();
cxt.translate(200,200);
cxt.arc(0,0,199,0,2*Math.PI,true);
cxt.closePath();

cxt.fill();

//绘制时钟上面的1~12数字。
cxt.fillStyle = ‘#ffffff‘;
cxt.font="60px ‘Bodoni MT‘";
cxt.textAlign="center";
cxt.textBaseline="middle";

cxt.fillText("12",0,-150);
cxt.fillText("1",150*Math.cos(Math.PI/3),-150*Math.sin(Math.PI/3));
cxt.fillText("2",150*Math.cos(Math.PI/6),-150*Math.sin(Math.PI/6));
cxt.fillText("3",150,0);
cxt.fillText("4",150*Math.cos(Math.PI/6),150*Math.sin(Math.PI/6));
cxt.fillText("5",150*Math.cos(Math.PI/3),150*Math.sin(Math.PI/3));
cxt.fillText("6",0,150);
cxt.fillText("7",-150*Math.cos(Math.PI/3),150*Math.sin(Math.PI/3));
cxt.fillText("8",-150*Math.cos(Math.PI/6),150*Math.sin(Math.PI/6));
cxt.fillText("9",-150,0);
cxt.fillText("10",-150*Math.cos(Math.PI/6),-150*Math.sin(Math.PI/6));
cxt.fillText("11",-150*Math.cos(Math.PI/3),-150*Math.sin(Math.PI/3));

//绘制时针,分针,秒针。
var hourDegree=numberToDegree(hour*5+Math.floor(minute/12));
var minuteDegree=numberToDegree(minute);
var secondDegree=numberToDegree(second);

var hourBeginPot=computePositionByLenghtAndDegree(8,(hourDegree+Math.PI));
var hourEndPot=computePositionByLenghtAndDegree(80,hourDegree);
var minuteBeginPot=computePositionByLenghtAndDegree(10,minuteDegree+Math.PI);
var minuteEndPot=computePositionByLenghtAndDegree(100,minuteDegree);
var secondBeginPot=computePositionByLenghtAndDegree(15,secondDegree+Math.PI);
var secondEndPot=computePositionByLenghtAndDegree(120,secondDegree);

cxt.strokeStyle="#fff";
cxt.beginPath();
cxt.moveTo(hourBeginPot.x,hourBeginPot.y);
cxt.lineTo(hourEndPot.x,hourEndPot.y);
cxt.lineWidth=6;
cxt.closePath();
cxt.stroke();

cxt.strokeStyle="#fff";
cxt.beginPath();
cxt.moveTo(minuteBeginPot.x,minuteBeginPot.y);
cxt.lineTo(minuteEndPot.x,minuteEndPot.y);
cxt.lineWidth=3;
cxt.closePath();
cxt.stroke();
//绘制秒针
cxt.strokeStyle="#ff0000";
cxt.beginPath();
cxt.moveTo(secondBeginPot.x,secondBeginPot.y);
cxt.lineTo(secondEndPot.x,secondEndPot.y);
cxt.lineWidth=2;
cxt.closePath();
cxt.stroke();

cxt.translate(-200,-200);

setTimeout(
function(){render(cxt)}
,50);

}

</script>

</body>
</html>

时间: 2024-10-26 17:09:50

用canvas模仿iPhone时钟的相关文章

用html5中的canvas写的时钟

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8&

canvas做的时钟,学习下

canvas标签只是图形容器,您必须使用脚本来绘制图形. getContext() 方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性.——获取上下文对象. getContext("2d") 对象属性和方法,可用于在画布上绘制文本.线条.矩形.圆形等等. fillRect(l,t,w,h):默认颜色是黑色 strokeRect(l,t,w,h):带边框的方块.默认一像素黑色边框 setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. beginP

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

先给个效果图,我画的比较丑,大家可以自己美化一下, 直接上代码: <!DOCTYPE html> <meta charset="utf-8"> <html> <body> <canvas width="500" height="500" id="clock" > 您的浏览器不支持canvas </canvas> <script> //获取画布

HTML5 Canvas绘制实时时钟

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>try to draw the colock</title> <script src="js/modernizr-1.7.js"></script> <script type="text/javascript"> wind

jqm选项卡开发,底部标签式设计,jqm模仿iPhone手机桌面菜单,jqm实战开发,jqm开发例子Demo

我有一个水货的上司,大家都是知道的.所以我就只能自学了,今天我给大家带来的是jQuery Mobile 模仿iphone 手机桌面的选项卡功能.比如电话,短信,浏览器,音乐的标签菜单.好吧,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>jQuery Mobile模仿iphone菜单项</title

h5+canvas绘制动画时钟

h5+canvas绘制动画时钟 效果图,这个是截图,可以动的, 代码如下: <!DOCTYPE html><html><head><title>动画效果</title></head> <body> <canvas id="anm" width="600" height="600" style="border:1px solid gray"

Android UI编程进阶——使用SurfaceViewt和Canvas实现动态时钟

概述: 很多时候我们想要自己写一些类似时钟.罗盘的控件,却又找不到合适的Demo.我想这时你可能索性就直接上图片了.在Android有Canvas和Paint这么好的画师的情况下,还是选择使用图片,的确是有一些尴尬了.下面我就利用一步一步实现自定义时钟来对这个问题做一个讲解.(注明:本人不太会制作GIF图片,以下图片均不能动态展示,想要查看动态效果,请转到博客末尾处下载源码进行查看) 错误示例: 这里我有一个"错误"的示例.这里的错误其实应该是要打上双引号的,因为它不是真的错误,只是在

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

最近学习了H5中的一个新标签canvas并且用它做出了一个时钟,最下面是成品图像,还不错吧,这只是我学习中的一个小demo,做得有点粗糙,但终究是做出来了,以后再写自己的网页主页再做一个好看点放上去.接下来我将和你们分享如何制作这个时钟. 在body中添加canvas标签: <canvas id="myCanvas" width="600px" height="600px" style="border:1px solid #c3c

canvas之动态时钟

1 function showTime(){ 2 var can=document.getElementById("canvas"); 3 var c=can.getContext("2d");//定义2D画布 4 can.width="1000"; 5 can.height="600"; 6 //平移确定中心 7 c.translate(500,300); 8 //获取本地时间 9 var sum=new Date(); 1