zoukankan      html  css  js  c++  java
  • canvas 时钟转动

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>canvas 时钟转动</title>
    </head>
    <body>
        <!-- 实现思路:
            1、找到canvas的中心,画出表盘
            2、根据当前时间计算角度,画出时针,分针,秒针,和刻度
            3、使用定时器,每过一秒获取新的时间,并重新绘图,达到时钟转动的效果 -->
        <canvas id="canvas" width="600" height="600"></canvas>
        <script>
            const canvas = document.getElementById('canvas');
            const context = canvas.getContext('2d');
            function drawClock() {
                context.save();
                context.clearRect(0, 0, 600, 600); //每次更新视图的时候都要把上一次的画布清除,再开始画新的视图
                context.translate(300,300); // 设置中心点,此时300,300变成了坐标的0,0
                context.rotate(-Math.PI/2); //将坐标轴逆时针旋转90度,x轴正方向对准12点方向
                context.save();
                // 画表盘
                context.beginPath();
                context.arc(0, 0, 100, 0, 2 * Math.PI);
                context.stroke(); 
                context.closePath();
                // 时针刻度
                context.lineWidth = 5;
                for(let i = 0; i < 12; i++) {
                    context.rotate(2 * Math.PI / 12);
                    context.beginPath();
                    context.moveTo(100, 0);
                    context.lineTo(85,0);
                    context.stroke();
                    context.closePath();
                }
                context.restore();
                context.save();
    
                // 分针刻度
                context.lineWidth = 1
                for (let i = 0; i < 60; i++) {
                    context.rotate(2 * Math.PI / 60);
                    context.beginPath();
                    context.moveTo(100, 0);
                    context.lineTo(90, 0);
                    context.stroke();
                    context.closePath();
                }
                context.restore();
                context.save();
    
                // 获取当前 时,分,秒
                let time = new Date();
                let hour = time.getHours() % 12; //将24小时转换为12小时
                let min = time.getMinutes();
                let sec = time.getSeconds();
                // 时针
                context.lineWidth = 5;
                context.rotate(2 * Math.PI / 12 * hour + 2 * Math.PI / 12 * (min / 60));
                context.beginPath();
                context.moveTo(0, 0);
                context.lineTo(50, 0);
                context.stroke();
                context.closePath(); 
    
                context.restore(); // 恢复成上一次save的状态
                context.save(); // 恢复完再保存一次
    
                //分针
                context.lineWidth = 3;
                context.rotate(2 * Math.PI / 60 * min + 2 * Math.PI / 60 * (sec / 60));
                context.beginPath();
                context.moveTo(0, 0);
                context.lineTo(70, 0);
                context.stroke();
                context.closePath(); 
    
                context.restore();
                context.save();
    
                //秒针
                context.lineWidth = 1;
                context.rotate(2 * Math.PI / 60 * sec);
                context.beginPath();
                context.moveTo(0, 0);
                context.lineTo(90, 0);
                context.stroke();
                context.closePath(); 
    
                context.restore();
                context.restore();
            }
            //使用setinterval();让时钟动起来
            setInterval(drawClock,1000);
        </script>
    </body>
    </html>
    

      

  • 相关阅读:
    MFC Bitmap::FromBITMAPINFO返回空问题
    String成员函数
    用xshell连接l自己的inux
    回调函数
    文件操作相关函数(POSIX 标准 open,read,write,lseek,close)
    Linux_GDB调试学习笔记
    程序中的一些限制(基于Linux系统C语言)
    第10课:[实战] Redis 网络通信模块源码分析(3)
    第09课:【实战】Redis网络通信模块源码分析(2)
    简单模拟多段线绘制Pline命令过程的撤销功能
  • 原文地址:https://www.cnblogs.com/smile01011/p/15178851.html
Copyright © 2011-2022 走看看