基于canvas的原生JS时钟效果

亦凉 2022-05-31 12:43 319阅读 0赞

概述

运用html5新增画布canvas技术,绘制时钟效果,无需引用任何插件,纯js。

详细

代码下载:http://www.demodashi.com/demo/11935.html

给大家介绍一个H5时钟效果,美女图片跟代码效果更配哦。

具体canvas中的坐标,线条,圆,图片等知识,大家可以参考教程文档

接下来给大家详细介绍下流程:

第一步:

首先需要创建一个画布canvas标签,定义画笔,做好前期准备工作O(∩_∩)O,

  1. <canvas id="myCanvas" height="420" width="420"></canvas>
  2. var cvs=document.getElementById('myCanvas');
  3. var ctx=cvs.getContext('2d');

第二步:

设置每一秒执行的函数:

  1. function clock() { /*...*/ }
  2. clock();
  3. setInterval(clock,1000);

画画记录均要写在此函数内,便于后续与计时器绑定。

计时器保证每一秒即执行一次函数,模拟时钟;

接下来补充函数的内容

第三步:

在画布上贴背景图,就是图中的美女,^_^

定义图片:

  1. var img=new Image();
  2. img.src="02.jpg";

此处需要定义一个onload函数,我们希望在图片加载完成之后再进行后续的画画操作,

  1. img.οnlοad=function () { /*...*/ }

第四步:

画钟表盘,地基工作,哈哈( ̄▽ ̄)”,每次画画都要又下笔和提笔的动作,即

  1. ctx.beginPath();
  2. /*...*/
  3. ctx.closePath();
  4. ctx.beginPath();
  5. ctx.arc(210,210,200,0,2*Math.PI,false);
  6. ctx.strokeStyle="#ccc";
  7. ctx.lineWidth=10;
  8. ctx.clip();
  9. ctx.stroke();
  10. ctx.drawImage(img,0,0,420,420);
  11. ctx.closePath();

第五步:

画钟表盘上的分刻度和时刻度

这里都采用一个循环,要算好角度,360度平分好。

  1. for (var i=0;i<60;i++){
  2. ctx.save();
  3. ctx.beginPath();
  4. ctx.translate(210,210);
  5. ctx.rotate(i*6*Math.PI/180);
  6. ctx.moveTo(0,-185);
  7. ctx.lineTo(0,-195);
  8. ctx.strokeStyle="#FEF319";
  9. ctx.lineWidth=5;
  10. ctx.stroke();
  11. ctx.closePath();
  12. ctx.restore();
  13. }

第六步:

画时针 分针 秒针三个指针:

画指针之前我们要先获取当前的时间

  1. var time=new Date();
  2. var h=time.getHours();
  3. var m=time.getMinutes();
  4. var s=time.getSeconds();
  5. h=h>11?h-12:h;
  6. h=h+(m/60);
  7. m=m+(s/60)

接下来就可以开心的画指针了,

对应每一秒的旋转角度要把握好,特别时时针和分针与秒针的关系。(1分等于60秒,当我没说,,,ԾㅂԾ,,)

  1. ctx.save();
  2. ctx.beginPath();
  3. ctx.translate(210,210);
  4. ctx.rotate(h*30*Math.PI/180);
  5. ctx.moveTo(0,14);
  6. ctx.lineTo(0,-130);
  7. ctx.strokeStyle="#60D9F8";
  8. ctx.lineWidth=8;
  9. ctx.stroke();
  10. ctx.closePath();
  11. ctx.restore();

第七步:

画秒针上面的小圈圈

  1. ctx.beginPath();
  2. ctx.arc(0,-150,7,0,2*Math.PI,false);
  3. ctx.strokeStyle="#FB1F11";
  4. ctx.lineWidth=3;
  5. ctx.fillStyle="#FEF319";
  6. ctx.fill();
  7. ctx.stroke();
  8. ctx.closePath();
  9. ctx.restore();

坚持坚持马上就成功了!!O(∩_∩)O

第八步:

中心位置的圆,即三个指针的固定点

  1. ctx.save();
  2. ctx.beginPath();
  3. ctx.translate(210,210);
  4. ctx.arc(0,0,7,0,2*Math.PI,false);
  5. ctx.strokeStyle="#FB1F11";
  6. ctx.lineWidth=3;
  7. ctx.fillStyle="#FEF319";
  8. ctx.fill();
  9. ctx.stroke();
  10. ctx.closePath();
  11. ctx.restore();

最后一步,画龙点睛

为钟表添加上电子表的时钟显示,哈哈

  1. var h2=time.getHours();
  2. var m2=time.getMinutes();
  3. var str=h2<10?('0'+h2):h2;
  4. var str2=m2<10?('0'+m2):m2;
  5. ctx.font="30px 微软雅黑";
  6. ctx.textAlign="center";
  7. ctx.fillStyle="red";
  8. ctx.fillText(str+":"+str2,210,320);

最终效果如下:有木有很漂亮o(* ̄▽ ̄*)ブ!!

canvas.gif

代码下载:http://www.demodashi.com/demo/11935.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

发表评论

表情:
评论列表 (有 0 条评论,319人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JS实现简单时钟效果

    老师上课需要我们做一个时钟的小作业 ,我把它放在上面记录一下啦 表盘和时针我都是用的背景图的形式,然后绝对定位,通过调整left和top确定时针、分针、秒针的位置,tran