• 模拟时钟


    效果图:

     一、实现时钟外形时,表盘的刻度和数字书写

    for(var i = 0;i < 60;i++){
            if(degree%30 == 0){
                cxt.beginPath();
                bigX = 400+big_radius*Math.sin(degree*Math.PI/180); //时钟刻度外面大的半径的坐标
                bigY = 300+big_radius*Math.cos(degree*Math.PI/180);
                smallX = 400+small_radius*Math.sin(degree*Math.PI/180);//时钟刻度外面小的半径的坐标
                smallY = 300+small_radius*Math.cos(degree*Math.PI/180);
                numX = 400+(small_radius-28)*Math.sin(degreeNum*Math.PI/180);//时钟刻度数字坐标
                numY = 300+(small_radius-28)*Math.cos(degreeNum*Math.PI/180);
                cxt.font = 'bold 55px Arial';//设置时钟数字样式
                cxt.textAlign = 'center';//数字水平居中
                cxt.textBaseline = 'middle';//数字垂直居中
                cxt.fillStyle = '#979797';
                cxt.moveTo(bigX,bigY); //设置刻度图像
                cxt.lineTo(smallX,smallY);
                cxt.lineWidth = 10;
                cxt.fillText(string.toString(),numX,numY);//设置数字图形
                cxt.fill();
                cxt.strokeStyle = "#979797";
                cxt.stroke();
                string = string + 1;
                if(string == 13){
                    string = string - 12;
                }
            }else{
                cxt.beginPath();
                cxt.moveTo(400+big_radius*Math.sin(degree*Math.PI/180),300+big_radius*Math.cos(degree*Math.PI/180));
                cxt.lineTo(400+small_radius*Math.sin(degree*Math.PI/180),300+small_radius*Math.cos(degree*Math.PI/180));
                cxt.lineWidth = 3;//细刻度
                cxt.strokeStyle = "#979797";
                cxt.stroke();
            }

    二、设置时钟表针

      cxt.translate(400,300);//首先将坐标设置到canvas中心,后面的rotate才会按照此原点旋转
        //秒针绘制
        cxt.beginPath();
        cxt.rotate(degreeSecond);
        cxt.moveTo(-3,60);
        cxt.lineTo(0,68);
        cxt.lineTo(3,60);
        cxt.lineTo(1,-210);
        cxt.lineTo(0,-215);
        cxt.lineTo(-1,-210);
        cxt.closePath();
    
        cxt.fillStyle = '#979797';
        cxt.fill();
    
        //分针绘制
        cxt.beginPath();
        cxt.setTransform(1,0,0,1,400,300,0,0,1);
        cxt.rotate(degreeMin);
        cxt.moveTo(-5,40);
        cxt.lineTo(0,48);
        cxt.lineTo(5,40);
        cxt.lineTo(3,-180);
        cxt.lineTo(0,-185);
        cxt.lineTo(-3,-180);
        cxt.closePath();
        cxt.fillStyle = '#979797';
        cxt.fill();
    
        //时针绘制
        cxt.beginPath();
        cxt.setTransform(1,0,0,1,400,300,0,0,1);
        cxt.rotate(degreeHour);
        cxt.moveTo(-7,20);
        cxt.lineTo(0,28);
        cxt.lineTo(7,20);
        cxt.lineTo(5,-150);
        cxt.lineTo(0,-155);
        cxt.lineTo(-5,-150);
        cxt.closePath();
        cxt.fillStyle = '#979797';
        cxt.fill();

    三、时针随时间转动

    var disDegreeOfSecond = Math.PI/30; //一秒 秒针走的度数
    var disDegreeOfMin = Math.PI/1800;  //一秒 分针走的度数
    var disDegreeOfHour = Math.PI/21600;//一秒 时针走的度数


    //使用setInterval,如果按照毫秒数增加,会出现时钟不准确的情况,就换了另一种实现方法
    setInterval(function(){ cxt.clearRect(0,0,canvas.width,canvas.height); clockStyle(); date = new Date(); hour = date.getHours(); minutes = date.getMinutes(); seconds = date.getSeconds(); degreeS = seconds * disDegreeOfSecond;
        degreeM = disDegreeOfMin * (seconds + minutes * 60);
    degreeH = disDegreeOfHour * (seconds + minutes * 60 + hour * 3600);
    if(hour > 12){ hour -= 12; } 
    clockPointerMove(degreeS,degreeM,degreeH);

    },1000);//这样表针就不能平滑转动了



    setInterval(function(){
            cxt.clearRect(0,0,canvas.width,canvas.height);
            clockStyle();
            degreeS += disDegreeOfSecond * 17/1000;
    degreeM += disDegreeOfMin * 17/1000;
    degreeH += disDegreeOfHour * 17/1000;

    clockPointerMove(degreeS,degreeM,degreeH);
     },17);  //表针可以平滑转动,但是时间不太准确



  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    微信小程序TodoList
    C语言88案例-找出数列中的最大值和最小值
    C语言88案例-使用指针的指针输出字符串
  • 原文地址:https://www.cnblogs.com/deerfig/p/6867773.html
Copyright © 2020-2023  润新知