美文网首页
Canvas绘制动态时钟

Canvas绘制动态时钟

作者: learninginto | 来源:发表于2020-01-29 21:02 被阅读0次

Canvas绘制动态时钟

  • 先看效果图

    效果图.gif
  • 还是有必要捋一下思路

    使用<canvas>元素并不难,只需要一些htmlJavaScript的基础

    明确功能之后,把时钟拆分成以下几个模块分别绘制:

    1. 绘制分针的刻度,由60个扇形1拼接而成,在它的上面覆盖一个白色的圆盘1
    2. 绘制时针的刻度,由12个扇形2拼接而成,在它的上面覆盖一个比圆盘1小的白色圆盘2
    3. 分别绘制时针、分针、秒针,由短到长,由粗到细
    4. 时针走过的角度(要加上 分针走过角度 / 60 * 30)
    5. 分针走过的角度(要加上 秒针走过角度 / 60 * 6)
    6. 绘制钟表中间的圆点
    7. 开启定时器,为了使秒针走得流畅,每16ms刷新一次
  • 完整代码
<canvas id="canvas" width="500" height="500"></canvas>
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext("2d");

function draw(x, y, r) {
    ctx.clearRect(0, 0, canvas.width, canvas.height);

    var d = new Date();
    var h = d.getHours();
    var m = d.getMinutes();
    var s = d.getSeconds();
    var ms = d.getTime();

    // 分针走过的角度要加上 秒针走过角度 / 60 * 6)
    var mdeg = (m * 6 - 90 + s / 60 * 6) * Math.PI / 180;

    // 时针走过的角度(要加上 分针走过角度 / 60 * 30)
    var hdeg = (h * 30 - 90 + m / 60 * 30) * Math.PI / 180;
    var sdeg = (ms / 1000 % 60 * 6 - 90) * Math.PI / 180;

    //绘制分钟的刻度
    for (var i = 0; i < 60; i++) {
        ctx.beginPath();
        ctx.moveTo(x, y);
        ctx.arc(x, y, r, (i * 6) * Math.PI / 180, (i + 1) * 6 * Math.PI / 180);
        ctx.closePath();
        ctx.stroke();
    }

    //绘制盖住分钟内圆刻度的白圆
    ctx.beginPath();
    ctx.fillStyle = "white";
    ctx.arc(x, y, r * 14 / 15, 0, 2 * Math.PI);
    ctx.fill();
    ctx.closePath();

    //绘制小时的刻度
    for (var i = 0; i < 12; i++) {
        ctx.beginPath();
        ctx.moveTo(x, y);
        ctx.arc(x, y, r, (i * 30) * Math.PI / 180, (i + 1) * 30 * Math.PI / 180);
        ctx.closePath();
        ctx.stroke();
    }

    //绘制盖住小时刻度的白圆
    ctx.beginPath();
    ctx.fillStyle = "white";
    ctx.arc(x, y, r * 13 / 15, 0, 2 * Math.PI);
    ctx.fill();
    ctx.closePath();

    //绘制时针
    ctx.beginPath();
    ctx.save();
    ctx.moveTo(x, y);
    ctx.lineWidth = 5;
    ctx.arc(x, y, r * 2 / 5, hdeg, hdeg);
    ctx.stroke();
    ctx.restore();
    ctx.closePath();

    //绘制分针
    ctx.beginPath();
    ctx.save();
    ctx.moveTo(x, y);
    ctx.lineWidth = 3;
    ctx.arc(x, y, r * 3 / 5, mdeg, mdeg);
    ctx.stroke();
    ctx.restore();
    ctx.closePath();

    //绘制秒针
    ctx.beginPath();
    ctx.save();
    ctx.moveTo(x, y);
    ctx.lineWidth = 2;
    ctx.arc(x, y, r * 4 / 5, sdeg, sdeg);
    ctx.stroke();
    ctx.restore();
    ctx.closePath();

    // 绘制圆心
    ctx.beginPath();
    ctx.save();
    ctx.moveTo(x, y);
    ctx.arc(x, y, r * 1 / 28, 0, 2 * Math.PI);
    ctx.fillStyle = "red";
    ctx.fill();
    ctx.restore();
    ctx.closePath();
}

draw(240, 240, 200);

setInterval(function(){
    draw(240, 240, 200);
},16)

相关文章

  • Canvas绘制出一个时钟

    参考视频资料:Canvas 绘制时钟 最近复习到Canvas,先准备来段有趣的代码,用Canvas绘制出一个动态的...

  • Canvas绘制动态时钟

    Canvas绘制动态时钟 先看效果图效果图.gif 还是有必要捋一下思路使用 元素并不难,只需要一些html和Ja...

  • 使用Canvas 绘制动态时钟

  • canvas绘制时钟

  • canvas绘制时钟

    这里简单了利用canvas做了一个时钟,样式配的比较难看主要讲了这么实现功能集体的细节根据自己的喜好来调试,请读者...

  • Canvas基础及动态时钟的实现

    Canvas基础以及动态时钟的实现 写在前面 HTML5 元素用于图形的绘制,通过脚本 (通常是JavaScr...

  • 使用canvas绘制时钟

    使用canvas绘制这样的一个时钟,这个时钟完全是通过代码绘制而成,没有使用图片: 不多说,贴代码: 把这段代码保...

  • 时钟的绘制---canvas

  • Canvas绘制时钟效果

    Cnavas绘制时钟 背景图的绘制(大圆、数字、小圆点),掌握基础知识:圆的绘制(arc方法),关于圆的弧度的计算...

  • canvas 绘制时钟特效

    说明:作为canvas初学者,好多知识都还没来得及深入了解,写下特效实现的梗概,谨以此纪念自己的第一次canvas...

网友评论

      本文标题:Canvas绘制动态时钟

      本文链接:https://www.haomeiwen.com/subject/ggsbthtx.html