You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
2.8 KiB

2 years ago
Page({
width:0,
height:0,
onLoad:function(){
//获取系统信息
wx.getSystemInfo({
//获取系统信息成功,保存获取到的系统窗口的窗高
success:res=>{
this.width=res.windowWidth
this.height=res.windowWidth
}
})
},
timer:null,
onReady: function () {
//创建ctx实例
var ctx =wx.creatCanvasContext('mycanvas')
//将角度转换为弧度,方便在后面使用
//计算公式:弧度=角度*Math.PI/180
const D6=6*Math.PI/180
const D30=30*Math.PI/180
const D90=90*Math.PI/180
//获取宽和高的值
var width=this.width,height=this.height
//计算表盘半径留下30px外边距
var radius=width/2-30
//每秒绘制一次
draw ()
this.timer=setInterval(draw,1000)
//绘制函数
function draw(){
//设置坐标轴原点为窗口的中心点
ctx.translate(width/2,height/2)
//绘制表盘
drawClock(ctx,radius)
//绘制指针
drawHand(ctx,radius)
//执行绘制
ctx.draw()
}
//绘制表盘部分
function drawClock(ctx,radius){
}
//绘制指针部分
function drawHand(ctx,radius){
}
function drawClock(ctx,radius){
ctx.setLinWidth(2)
ctx.beginpath()
ctx.arc(0,0,radius,0,2*Math.PI,true)
ctx.setLineWidth(1)
ctx.beginPath()
ctx.arc(0,0,8,0,2*Math.PI,true)
ctx.stroke()
ctx.setLineWidth(5)
for(var i=0;i<12;++i){
ctx.rotate(D30)
ctx.beginPath()
ctx.moveTo(radius,0)
ctx.lineTo(radius-15,0)
ctx.stroke()
}
ctx.setLineWidth(1)
for(var i=0;i<60;++i){
ctx.rotate(D6)
ctx.beginPath()
ctx.moveTo(radius,0)
ctx.lineTo(radius-10,0)
ctx.stroke()
}
ctx.setFontSize(20)
ctx.textBaseline='middle'
var r=radius-30
for(var i=1;i<=12;++i){
var x=r*Math.cos(D30*i-D90)
var y=r*Math.sin(D30*i-D90)
if(i>10){
ctx.fillText(i,x-12,y)
}else{
ctx.fillText(i,x-6,y)
}
}
}
function drawHand(ctx,radius){
var t=new Date()
var h=t.getHours()
var m=t.getMinutes()
var s=t.getSeconds()
h=h>12?h-12:h
ctx.rotate(-D90)
ctx.save()
ctx.rotate(D30*(h+m/60+s/3600))
ctx.setLineWidth(6)
ctx.beginPath()
ctx.moveTo(-20,0)
ctx.lineTo(radius/2.6,0)
ctx.stroke()
ctx,restore()
ctx.save()
ctx.rotate(D6*(m+s/60))
ctx.setLineWidth(4)
ctx.beginPath()
ctx.moveTo(-20,0)
ctx.lineTo(radius/1.8,0)
ctx.stroke()
ctx.restore()
ctx.save()
ctx.rotate(D6*s)
ctx.setLineWidth(2)
ctx.beginPath()
ctx.moveTo(-20,0)
ctx.lineTo(radius/1.6,0)
ctx.stroke()
ctx.restore()
}
}
})