HTML5 canvas实现钟表

上次说到了canvas的画布如何画矩形、圆形和自由画图实现你画我猜的效果,这次就来说一下如何实现我们生活中最经常看到的时钟吧。

还是和之前一样的操作,写好画布的大小,因为有些浏览器不支持,所以写上不支持,在遇到不支持的浏览器时就会出现不支持三个字

<canvas id="canvas" width="400" height="400">
			不支持
		</canvas>

获取元素

var oC = document.getElementById("canvas")
var oGC = oC.getContext("2d")

定义方法,画出时钟上面的60个刻度

function draw(){
				var oDate = new Date()
				var oHours = oDate.getHours()
				var oMin = oDate.getMinutes()
				var oSec = oDate.getSeconds()
				
				var oHoursValue = (-90+oHours*30+oMin/2)*Math.PI/180
				var oMinValue = (-90+oMin*6)*Math.PI/180
				var oSecValue = (-90+oSec*6)*Math.PI/180
				
				//60个小刻度
				var x = 200
				var y = 200
				var r = 150
				oGC.save()
				oGC.beginPath()
				for (var i=0;i<60;i++) {
					oGC.moveTo(x,y)
					oGC.arc(x,y,r,6*i*Math.PI/180,6*(i+1)*Math.PI/180)
				}
				
				oGC.closePath()
				oGC.stroke()
				oGC.restore()
}

 

 因为只要用到最外边的线,所以我们要把中间的线覆盖掉,填充一个圆填充颜色为白色

oGC.save()
oGC.beginPath()
oGC.fillStyle = "white"
oGC.moveTo(x,y)
oGC.arc(x,y,r*19/20,0,360*Math.PI/180)
oGC.closePath()
oGC.fill()
oGC.restore()

 

 在没五个刻度弄一个大刻度,为时间12345时间的刻度位置

oGC.save()
oGC.beginPath()
oGC.lineWidth = 3
for (var i=0;i<12;i++) {
    oGC.moveTo(x,y)
    oGC.arc(x,y,r,30*i*Math.PI/180,30*(i+1)*Math.PI/180)
}
oGC.closePath()
oGC.stroke()
oGC.restore()

再次用刚刚的办法吧大刻度内的线给覆盖掉

oGC.save()
oGC.beginPath()
oGC.fillStyle = "white"
oGC.moveTo(x,y)
oGC.arc(x,y,r*18/20,0,360*Math.PI/180)
oGC.closePath()
oGC.fill()
oGC.restore()

最后把时、分、秒针给画出来,并且同步本地时间

	            //时针
				oGC.save()
				oGC.beginPath()
				oGC.moveTo(x,y)
				oGC.strokeStyle = "blue"
				oGC.arc(x,y,r*10/20,oHoursValue,oHoursValue)
				oGC.closePath()
				oGC.stroke()
				oGC.restore()
				//分针
				oGC.save()
				oGC.beginPath()
				oGC.moveTo(x,y)
				oGC.strokeStyle = "green"
				oGC.arc(x,y,r*12/20,oMinValue,oMinValue)
				oGC.closePath()
				oGC.stroke()
				oGC.restore()
				//秒针
				oGC.save()
				oGC.beginPath()
				oGC.moveTo(x,y)
				oGC.strokeStyle = "red"
				oGC.arc(x,y,r*16/20,oSecValue,oSecValue)
				oGC.closePath()
				oGC.stroke()
				oGC.restore()

最后加多一个定时器,让他转起来

setInterval(function(){
				draw()
				
			},1000)

展开阅读全文

没有更多推荐了,返回首页