• HTML5之Canvas时钟(网页效果--每日一更)


      今天,带来的是使用HTML5中Canvas标签实现的动态时钟效果。

      话不多说,先看效果:亲,请点击这里

      众所周知,Canvas标签是HTML5中的灵魂,HTML5 Canvas是屏幕上的一个由JavaScript控制的即时模式位图区域。即时模式是指在画布上呈现像素的方式,

      HTML5 Canvas通过JavaScript调用CanvasAPI,在每一帧完全重绘屏幕上的位图。详细将在下面代码进行说明。

      HTML结构代码:

    1     <canvas id="canvas" width="500" height="500">
    2         您的浏览器不支持Canavas标签,请升级浏览器再查看此页面!
    3     </canvas>

      CSS样式代码:

    1     <style type="text/css">
    2         *{margin:0px;padding:0px;}
    3         .canvasbox{margin:50px auto;background:#dadada;width:500px;}
    4     </style>

      JS脚本代码:

      1 <script type="text/javascript">
      2         var canvas = document.getElementById("canvas");
      3         //获取Canvas的2d上下文对象
      4         var context = canvas.getContext("2d");
      5 
      6         //定义一个初始化函数
      7         function init(){
      8             //先清除画布上的所有图像
      9             context.clearRect(0,0,500,500);
     10 
     11             //获取系统时间
     12             var date = new Date();
     13             var hours = date.getHours();
     14             //因为钟表是12小时制,所以必须对时刻度进行控制
     15             hours = hours > 12 ? hours-12 : hours;
     16             var minutes = date.getMinutes();
     17             var seconds = date.getSeconds();
     18 
     19             //开始画表盘
     20             context.beginPath();
     21             //在画布中心250,250点上画一个圆
     22             context.arc(250,250,200,0,360,false);
     23             //定义画笔的宽度
     24             context.lineWidth = 10;
     25             //定义画笔颜色
     26             context.strokeStyle = "#000";
     27             //关闭绘画路径
     28             context.closePath();
     29             //上色
     30             context.stroke();
     31 
     32             //开始画刻度
     33             //时刻度
     34             for(var h = 0;h < 12;h++){
     35                 //先将图像进行保存
     36                 context.save();
     37                 context.lineWidth = 8;
     38                 context.strokeStyle = "#f00";
     39                 //定义旋转中心点
     40                 context.translate(250,250);
     41                 //定义旋转角度
     42                 context.rotate(h*30*Math.PI/180);
     43                 context.beginPath();
     44                 context.moveTo(0,190);
     45                 context.lineTo(0,170);
     46                 context.closePath();
     47                 context.stroke();
     48                 //将之前的保存的图像显示,形成新的图像
     49                 context.restore();
     50             }
     51             //分刻度
     52             for(var m = 0;m < 60;m++){
     53                 context.save();
     54                 context.lineWidth = 4;
     55                 context.strokeStyle = "red";
     56                 context.translate(250, 250);
     57                 context.rotate(m*6*Math.PI/180);
     58                 context.beginPath();
     59                 context.moveTo(0, 190);
     60                 context.lineTo(0, 180);
     61                 context.closePath();
     62                 context.stroke();
     63                 context.restore();
     64             }
     65 
     66             //画时针
     67             context.save();
     68             context.lineWidth = 8;
     69             context.strokeStyle = "#000";
     70             context.translate(250,250);
     71             context.rotate(hours*30*Math.PI/180);
     72             context.beginPath();
     73             context.moveTo(0,10);
     74             context.lineTo(0,-100);
     75             context.closePath();
     76             context.stroke();
     77             context.restore();
     78 
     79             //画分针
     80             context.save();
     81             context.lineWidth = 4;
     82             context.strokeStyle = "#000";
     83             context.translate(250,250);
     84             context.rotate(minutes*6*Math.PI/180);
     85             context.beginPath();
     86             context.moveTo(0,10);
     87             context.lineTo(0,-140);
     88             context.closePath();
     89             context.stroke();
     90             context.restore();
     91 
     92             //画秒针
     93             context.save();
     94             context.lineWidth = 2;
     95             context.strokeStyle = "blue";
     96             context.translate(250,250);
     97             context.rotate(seconds*6*Math.PI/180);
     98             context.beginPath();
     99             context.moveTo(0,10);
    100             context.lineTo(0,-170);
    101             context.closePath();
    102             context.stroke();
    103             context.restore();
    104         }
    105         //调用定时器,在每秒刷新重绘新图像
    106         setInterval(init,1000);
    107     </script>

      其中,蕴含着一个小BUG。在绘画时刻度和分刻度时,若颜色不一时,会出现重叠现象,因为在绘画时刻度后,再进行绘画分刻度,故小编将两刻度颜色设置为一致,避免该现象产生。当然,也可以通过判断去进行处理,小编就不在此进行处理。

      在浏览该效果时,请使用支持HTML5的浏览器,以免影响浏览效果。

      享受代码,享受生活,网页效果,每日一更。

  • 相关阅读:
    Centos7下永久修改mysql5.6最大连接数
    关于Linux fontconfig 字体库的坑
    回收maven私仓过期垃圾数据
    conda python虚拟环境
    小程序分享H5页面
    会看以前的邮箱
    快乐的小程序
    和运营开会的知道的一些点
    V-Distpicker不能完整显示内容
    VUE随手记坑
  • 原文地址:https://www.cnblogs.com/ChampionLam/p/3983855.html
Copyright © 2020-2023  润新知