[SoOnPerson] HTML5 Canvas 模拟时钟

4 篇文章 0 订阅

因为和朋友在讨论一个关于时钟的问题:

    一天(24h),时钟的分针和时针可以重合多少次,他们一直在争论22,23

然后我觉得蛮好玩的,就写了一个看看,但是对于22,23,我也没想数过

//屏幕的高度
var sc_height = screen.availHeight;
//屏幕的宽度
var sc_width = screen.availWidth;
//秒针角度
var jiaoduS = 0;
//分针角度
var jiaoduM = 0;
//一秒
var s = 1000   ;
function draw() {
    //jq获取元素
    var cav = $("#background_block_web");
    //设置style里的宽高
    cav.css({"height": sc_height, "width": sc_width, "margin": 0});
    //设置属性宽高,这个不设置的话,图案会很模糊
    cav.attr("width",sc_width);
    cav.attr("height",sc_height);

    //原生获取元素,通过jq获取的好像不可以
    var cv = document.getElementById("background_block_web");
    //获取上下文对象2d,具体我也不太懂


    var context = cv.getContext('2d');
    context.fillStyle = "white";
    context.fillRect(0,0,sc_width,sc_height);
    drawMap(context);

}
function  drawMap(context) {
    window.setInterval(function () {
    //清除
    context.clearRect(0,0,sc_width,sc_height);
    //黑色的填充色,圆球的填充色
    context.fillStyle = 'white';
    //开始
    context.beginPath();
    //圆的边的颜色
    context.strokeStyle = 'black';
    //圆的 x,y,大小,起始角度,结束角度360度,也就是一圈,因为pi是180度
    context.arc(300,300,300,0,2*Math.PI);
    //填充上面的黑色
    context.fill();

    //圆心为起点,画一条直线(分针)
    context.moveTo(300,300);
    context.lineTo(300+150*Math.sin(jiaoduM),300-150*(Math.cos(jiaoduM)));
    //圆心为起点,画一条直线(秒针)
    context.moveTo(300,300);
    context.lineTo(300+200*Math.sin(jiaoduS),300-200*(Math.cos(jiaoduS)));
    
    //角度增加
    jiaoduS+=((6)*(Math.PI/180));
    jiaoduM+=((0.1)*(Math.PI/180));

        //画
    context.stroke();

    },s);
}
 

解释一下表盘半径300,圆心坐标(300,300);左上角的坐标轴(0,0),分针是短的那个,长度是150,秒针是长的,长度200

秒针每秒转过的角度是6度,原因是60秒转过360度,所以一秒六度

分针每秒转过的角度是0.1度,原因是3600秒转360度,所以一秒0.1度

π 是180度,所以π/180 =1度

至于每个角度对应的线段的终点坐标,画一个坐标轴算一下就好

知道角度还有斜边

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值