canvas实现的时钟效果

最近在网上看到了一个css3实现的可爱时钟,觉得很nice,然后就想着用canvas试试实现这个时钟效果。

首先,要实现时钟需要先计算时钟上的数字应该占整个圆的大小。

因为一个圆是360度,所以数字之间就是360/12=30度,所以我在圆上画出数字的代码是这样的:

            drawNumber:function(){
                this.context.save();
                for(var i = 0;i < 12; i++){
                    var angle = i*30;
                    angle = angle*Math.PI/180;
                    var n = (i+3 > 12) ? i+3-12:i+3;
                    var x = Math.round(Math.cos(angle)*(this.r-20));
                    var y = Math.round(Math.sin(angle)*(this.r-20));
                    this.context.fillStyle="#8DA6B8";
                    this.context.font = "bold 20px Calibri";
                    this.context.textAlign = "center";
                    this.context.textBaseline = "middle";
                    this.context.fillText(n,x+this.widths/2,y+this.heights/2);
                }
                this.context.restore();
            },

因为Math.cos()和Math.sin()接受的都是弧度制,所以需要把30度转换成对应的弧度喔。

其次,我们来看看怎么画时钟上的时针、分针以及秒针。

因为时针、分针、秒针要随着时间的改变而改变,所以我们需要获取当前时间以及context.translate(this.widths/2,this.heights/2);context.rotate(rotate);来对时针、分针、秒针的旋转。

其中时针的旋转弧度是:hrotate = (h*30+(m/60)*30+(s/3600)*30)*Math.PI/180; (ps:每过一个小时,时针就需要旋转30度)

分针的旋转弧度是:mrotate = (m*6+(s/60)*6)*Math.PI/180;(ps:每过一分钟,分针就需要旋转6度)

秒针的旋转弧度是:srotate = (s*6)*Math.PI/180;(ps:每过一秒,秒针就需要旋转6度)

            var time = new Date();
                var h = time.getHours();
                var m = time.getMinutes();
                var s = time.getSeconds();
                var hrotate = (h*30+(m/60)*30+(s/3600)*30)*Math.PI/180;
                var mrotate = (m*6+(s/60)*6)*Math.PI/180;
                var srotate = (s*6)*Math.PI/180;
                // console.log(h + ‘:‘ + m + ‘:‘ + s);

                //时针
                this.context.save();
                this.context.translate(this.widths/2,this.heights/2);
                this.context.save();
                this.context.rotate(hrotate);
                this.context.beginPath();
                this.context.lineCap="round";
                this.context.moveTo(0,0);
                this.context.lineTo(0,-40);
                this.context.strokeStyle="#1AA9D8";
                this.context.lineWidth=6;
                this.context.stroke();
                this.context.closePath();
                this.context.restore();
                //分针
                this.context.save();
                this.context.rotate(mrotate);
                this.context.beginPath();
                this.context.lineCap="round";
                this.context.moveTo(0,0);
                this.context.lineTo(0,-50);
                this.context.strokeStyle="#23BCEF";
                this.context.lineWidth=4;
                this.context.stroke();
                this.context.closePath();
                this.context.restore();
                //秒针
                this.context.save();
                this.context.rotate(srotate);
                this.context.beginPath();
                this.context.lineCap="round";
                this.context.moveTo(0,0);
                this.context.lineTo(0,-65);
                this.context.strokeStyle="#23BCEF";
                this.context.lineWidth=1;
                this.context.stroke();
                this.context.closePath();
                this.context.restore();
                this.context.restore();

最后,使用setInterval()方法来实现画布的周期性更新,在每次绘画之前需要先将画布清空哟,要不然,嘿嘿,你懂的。

这样我们的时钟就完成了,canvas是不是也很赞呀!好了,canvas时钟就讲到这啦,有什么讲的不对的地方希望各位大神指正,小女子在此谢过!

时间: 2024-07-29 07:42:19

canvas实现的时钟效果的相关文章

使用canvas实现数字时钟效果

<canvas id="canvas"></canvas> <script> (function(){ var digit= [ [ [0,0,1,1,1,0,0], [0,1,1,0,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,0,1,1,0], [0,0,1,

transform实现的时钟效果

又来一个时钟效果了,这个的实现不需要canvas,都是div.ul.li画出的,好玩有真实. 哈哈~ 需要的js才能实现到走动这个效果,但js的内容不多,也不难. 主要是一个css里transform的使用的思路,transform里有很多变幻属性,而普通的时钟 在我心中就是个圆圆的东西,那么是不是可以旋转这个属性(rotate)实现了,它的刻度 使用旋转且把旋转点设置在圆心,那不就可以绕着圆心转了吗,而时针它们的底部不是和 圆心接触的吗,那么设置时针的底部为旋转点不就OK了,大概的说了说思路.

h5+canvas绘制动画时钟

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

第35天:时钟效果

时钟效果案例 1.得到现在的时分秒2.旋转角度原理一圈360°   60s   1s/6°旋转second.style.WebkitTransform="rotate(60deg)";//每秒旋转60度 案例: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>时钟效果</

1.1 结合date()和setTimeOut()实现简单的时钟效果

一.简单的时钟效果 首先要熟悉日期函数date()以及其常用的方法 getFullYear()  返回完整的年份 比如:2016 getMonth()  返回月份(从0开始,需+1) getDate()  返回日期 getHours()  返回小时数 getMinutes()  返回分钟数 getSeconds()  返回秒数 getDay() 返回星期几 (0-6,0是星期天,1是星期一) 写一个简单的html页面,用来展示时钟效果 <!DOCTYPE html> <html>

如何使用 HTML5 Canvas 制作水波纹效果

原文:如何使用 HTML5 Canvas 制作水波纹效果 今天,我们继续分享 JavaScript 实现的效果例子,这篇文章会介绍使用 JavaScript 实现水波纹效果.水波效果以图片为背景,点击图片任意位置都会触发.有时候,我们使用普通的 Javascript 就可以创建一个很有趣的解决功能. 在线演示      源码下载 Step 1. HTML 和以前一样,首先是 HTML 代码: <!DOCTYPE html> <html> <head> <meta

用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&

原生javascript实现网页显示日期时钟效果

刚接触javascript中Date内置对象时,以为这些方法都太简单了,结果要自己实际操作写一个时钟效果还真一时把我难住了,主要有几点大家要注意的.先看实际效果 要实现这样的效果 某年某月某日星期几几时几分几秒 先看代码效果 <script type="text/javascript"> window.onload=function(){ showDate(); countdown(); } function showDate(){ var myDate=new Date(

canvas做的时钟,学习下

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