<!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>Document</title>    <script>        window.onload = function () {            var canvas = document.querySelector('canvas')            var context = canvas.getContext('2d')                        function clock() {                //绘制圆盘                context.beginPath()                context.arc(300, 300, 200, 0, Math.PI * 2)                               context.fillStyle = 'yellow'                context.fill()                //完结门路                context.closePath()                //绘制时刻度                for (i = 1; i <= 12; i++) {                    // save():将以后的绘画状态进行保留并存入状态栈                    //简而言之就是保留画刻度之前的状态 和restore()一起用                    context.save()                    context.lineWidth = 4                    context.beginPath()                    //将原点平移 圆心地位                    context.translate(300, 300)                    //旋转30度  小时的刻度                    // angle:旋转角度,旋转的中心点就是坐标轴的原点                    context.rotate(i * (Math.PI / 6))                    //绘制时刻度  从内向里画(反过来则要正数)                    context.moveTo(0, 200)                    context.lineTo(0, 180)                    context.stroke()                    context.fillStyle = 'black'                    // 调整数字的大小                    context.font = '20px bold'                    //数半径                    context.fillText(i, -10, -150)                    context.closePath()                    // restore():该办法每次调用只会回滚到上一次save的状态                    //回退到画刻度之前的save()状态,不影响前面的时针,分针等等的绘制                    context.restore()                }                //绘制分刻度  分针要转60次                for (i = 1; i <= 60; i++) {                    context.save()                    //平移原点    新的原点就是圆心                    context.translate(300, 300)                    // 分针要转60次的6度     Math.PI相当于180度                    context.rotate(i * (Math.PI / 30))                    context.beginPath()                    // 绘制分刻度  从里往外画                    context.moveTo(0, -190)                    context.lineTo(0, -200)                    context.stroke()                    context.closePath()                    //反复分刻度                    context.restore()                }                //利用内置函数Date() 获取以后工夫                var date = new Date()                //打印看一下                console.log(date);                //获取以后的小时                var hours = date.getHours()                //获取以后分钟                var minutes = date.getMinutes()                //获取以后秒数                var seconds = date.getSeconds()                //打印看一下                console.log(hours, minutes, seconds);                //以后的小时数                hours = hours + minutes / 60;                //绘制时针  仍旧要保留绘画时针前的状态而后画完后回退                context.save()                //平移原点                context.translate(300, 300)                //小时乘以30度                // rotate(angle):旋转角度,旋转的中心点就是坐标轴的原点                context.rotate(hours * (Math.PI / 6))                context.beginPath()                context.lineWidth = 5                context.moveTo(0, 10)                context.lineTo(0, -90)                context.stroke()                context.closePath()                context.restore()                //绘制分针                context.save()                //平移原点   新原点就是圆心                context.translate(300, 300)                //先依据以后分钟旋转到那个地位  找到坐标                 context.rotate(minutes * (Math.PI / 30))                //再绘制分针                context.beginPath()                //调整时针线宽                context.lineWidth = 3                //开始绘制  moveTo() 是挪动到分针的起始地位                context.moveTo(0, 10)                //lineTo() 是画直线  (0, -120)是完结坐标点 这个坐标点是绝对圆心来说的,因为后面translate(300, 300)曾经把原点平移到圆心的地位了                context.lineTo(0, -120)                context.strokeStyle = 'blue'                context.stroke()                context.closePath()                context.restore()                //绘制秒针                context.save()                context.translate(300, 300)                //小时乘以30度                // angle:旋转角度,旋转的中心点就是坐标轴的原点                context.rotate(seconds * (Math.PI / 30))                context.beginPath()                //调整线宽 也就是秒针的宽度                context.lineWidth = 2                //绘制秒针                context.moveTo(0, 10)                context.lineTo(0, -170)                //扭转秒针款式                context.strokeStyle = 'red'                //画的是轮廓图形                context.stroke()                //完结门路                context.closePath()                //回退状态                context.restore()                //绘制交叉处                //  save():将以后的绘画状态进行保留并存入状态栈                context.save()                context.translate(300, 300)                // 开始门路                context.beginPath()                //绘制时钟两头的小圆  xy轴开始地位  小圆半径 开始弧度  完结弧度360度                context.arc(0, 0, 5, 0, Math.PI * 2)                //填充圆设置为红色                context.fillStyle = 'white'                //轮廓圆设置红色                context.strokeStyle = 'red'                //绘制填充圆                context.fill()                //绘制轮廓圆                context.stroke()                //完结门路                context.closePath()                context.restore()                //超时模仿间歇  防止载入时 时钟先隐没一小会儿再呈现                setTimeout(clock, 1000)            }            clock()        }    </script></head><body>    <canvas width="600px" height="600px" style="background-color: rgb(154, 233, 243);"></canvas></body></html>