HTML文件实例——时钟

2022-01-20 13:57:25 浏览数 (1)

在线监测系统由数据采集、数据分析处理、数据远程传输以及Client等多部分组成。传感器采集到特征信号后,本地系统对该信号进行分析与处理,进而确定系统的运行状态,紧接着需要把数据结果传输到远端Client。在现实在线监测系统中,一般建立了传输数据的标准格式,并且在Client对得到的文件进行解析,本推文以网上很火的时钟小程序为例(结果如下图所示),对传输文件的格式进行简单介绍,具体如下:

代码语言:javascript复制
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>time</title>
</head>
<body>
<canvas id="graph" width="1366px" height="768">你的浏览器不支持time</canvas>
<script type="text/javascript">
    var canvas = document.getElementById('graph');
    var context = canvas.getContext('2d');
    var r = canvas.width/5;  //半径
    //将坐标中心作为起启点
    context.translate(canvas.width / 2, canvas.height / 2);
    function drawCircle() {
        context.beginPath();
        context.lineWidth = 5;
        context.strokeStyle = "#000";
        context.arc(0, 0, r, 0, Math.PI * 2, true);
        context.stroke();
        context.closePath();
    }
    function drawClockScale() {
        var rad = 0, angle, font, fontX, fontY;
        context.fillStyle = '#000';
        // 绘制表盘时刻度
        for (var i = 0; i < 12; i  ) {
            context.save();
            rad = i * Math.PI / 6;  // 弧度制,大刻度,总共分为12刻度,每刻度为:2π/12 → π/6
            context.rotate(rad);  // 旋转画布绘制刻度
            context.fillRect(r - 10, 0, 10, 5);
            context.restore();
        }
        // 绘制表盘分刻度
        for (i = 0; i < 60; i  ) {
            context.save();      // 记录旋转画布之前初始状态
            rad = i*Math.PI/30;
            context.rotate(rad);  // 旋转画布绘制刻度
            context.fillRect(r - 10, 0, 5, 2);   //绘制
            context.restore();  // 恢复初始状态,未旋转前
        }
        // 绘制表盘文字
        for(i = 0;i<12;i  ){
            angle = i * 30;
            // 转换为弧度制,Math.sin、Math.cos都接受弧度制单位
            angle = angle*Math.PI/180;;
            font = (i   3 > 12)?i 3-12 : i 3;
            fontX = Math.round(Math.cos(angle)*(r-30));
            fontY = Math.round(Math.sin(angle)*(r-30));
            context.font = 'bold 14px 微软雅黑';
            context.fillText(font '',fontX,fontY);
        }
    }
    function drawHand(rotate,width,height){
        context.save();
        rotate = rotate*Math.PI/180;      // 转换为弧度制
        context.rotate(rotate);
        context.fillRect(-10,0,width,height);
        context.restore();
    }
    function setTime(){
        var hour = new Date().getHours();
        var minute = new Date().getMinutes();
        var second = new Date().getSeconds();
        //console.log(hour   ':'   minute   ':'   second);
        var hourRotate,minRotate,secRotate;
        // 计算秒针角度并绘制图形
        secRotate = second*6-90;
        drawHand(secRotate,r-30,2);
        // 计算分针角度并绘制图形
        minRotate = (minute*60   second)*0.1 - 90;
        drawHand(minRotate,r-50,4);
        // 计算时针角度并绘制图形
        hourRotate = (hour*60*60   minute*60   second)/120 - 90;
        drawHand(hourRotate,r-70,5);
    }
    setInterval(function(){
        context.clearRect(-canvas.width / 2,-canvas.height / 2,canvas.width,canvas.height);
        drawCircle();
        drawClockScale();
        setTime();
    },1000);
</script>
</body>
</html>

0 人点赞