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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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()
}
}
})