• HTML5 Canvas画数字时钟


    先不说废话,没代码算个蛋。

    一些地方注释都写得比较清楚,不过这只是部分,因为只有秒针,但是时针,分针的逻辑都是一致的。

    代码中有些坐标不知道为什么较不准,看看就好

    类似就是这样,没有经过美化。

     1 <html>
     2 <head>
     3     <title></title>
     4 </head>
     5 <body>
     6     <canvas id="clock1.0" width="600" height="300" style="border:1px solid"></canvas>
     7     <script type="text/javascript">
     8         var canvas;
     9         var ctx;
    10         var width = 600;
    11         var height = 300;
    12         var c_r = Math.min(width, height) / 3;
    13         var pattern;
    14         var j = new Date().getSeconds();//获取当前时间的秒数
    15         function init() {
    16             canvas = document.getElementById('clock1.0');
    17             ctx = canvas.getContext('2d');//你懂得,必须得写的
    18             ctx.fillStyle = "white";
    19             ctx.fillRect(0, 0, width, height);
    20             waiquan();
    21             neiquan();//其实圆环的产生是黑色的外圈+背景色的内圈
    22             miaoshu();//内圈中写个秒数,去掉后也可以做圆环进度条
    23         }
    24         var image = new Image();
    25         image.onload = function (e) {
    26             pattern = ctx.createPattern(image, 'repeat');
    27         }//加载个图片背景图
    28         function miaoshu() {
    29 
    30             var miao = new Date().getSeconds();
    31             if (miao < 10) {
    32                 miao = "0" + miao;
    33             }//秒数10以下,显示的是单位数,不美观
    34             ctx.font = '80px arial';
    35             image.src = 'redball.png';
    36             ctx.fillStyle = pattern;//这个背景图是用来做数字文字背景,其实完全没必要的
    37             ctx.fillText(miao, width / 2-45, height / 2+30);//图片填充的文字
    38             ctx.strokeText(miao, width / 2 - 45, height / 2 + 30);//描边文字
    39         }
    40         function neiquan() {//内圈就是一个园,背景色的圆
    41                 ctx.beginPath();
    42                 ctx.moveTo(width / 2, height / 2);
    43                 ctx.fillStyle = "white";
    44                 ctx.arc(width / 2, height / 2, c_r *0.81, 0, 2 * Math.PI, false);//自己控制内圈半径
    45                 ctx.fill();
    46         }
    47         function waiquan() {//外圈就需要考虑阴影面积了
    48             if (j < 60) {
    49                 var hudu = 2 * Math.PI / 360 * (j * 6);//采用弧度机制,360度分为60格,每格6度,360度为2PI,所以j最大值为59
    50                 ctx.beginPath();
    51                 ctx.moveTo(width / 2, height / 2);//这里添加moveTo,其实是定义Fill()时的起始点,这里就是从圆心
    52                 //不添加上面这句,那么你画出来的阴影就不是扇形,是。类似切冬瓜。一圈一圈。。  
    53                 ctx.arc(width / 2, height / 2, c_r, 3 / 2 * Math.PI, 3 / 2 * Math.PI + hudu, false);//这里就注意arc()的第四个参数,是弧度的起始位置,一般以前看到的都是0,这里要从3/2PI开始
    54                 //var grd = ctx.createLinearGradient(width / 2, height / 2, c_r/2, 3 / 2 * Math.PI, width / 2, height / 2, c_r, 3 / 2 * Math.PI); //本来想搞高渐变的,目前不成功
    55                 //grd.addColorStop(0, "#000000");
    56                 //grd.addColorStop(1, "#ffff00");
    57                 //ctx.fillStyle = grd;
    58                 ctx.fillStyle = "grey";
    59                 ctx.fill();
    60                 j++
    61             }
    62             else {
    63                 j = 1;//这里可扩展到分针,j=1表示秒针重置,这时分针+1
    64             }
    65         }
    66 
    67         function clean() {
    68             ctx.fillStyle = "white";
    69             ctx.fillRect(0, 0, width, height);//以背景色,清除画布
    70         }
    71 
    72         setInterval(function () {//这里要注意的是清除的步骤,不然效果会很差
    73             //先清空画布,把之前状态的清空,外圈,因为外圈黑色,再画内圈,把外圈中心盖掉,再画时间
    74             clean();
    75             waiquan();
    76             neiquan();
    77             miaoshu();
    78 
    79         }, 1000)//1000ms,走的快的钟就不是钟了
    80         window.onload("load", init(), true);//init作为初始加载函数
    81     </script>
    82 </body>
    83 </html>
  • 相关阅读:
    TCP 连接断连问题剖析
    libtool: link: you must specify an output file
    socket编程bind浮动ip
    epoll或者kqueue的原理是什么?
    推荐 30 款最好的免费项目管理软件
    QNX开发最完整图文教程(官方文档,非官方翻译)
    Android 4.X系列の界面设计中退出Android程序的代码
    APScheduler 定时任务系统
    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
    APSchenuler嵌入Django
  • 原文地址:https://www.cnblogs.com/lm1107/p/4763698.html
Copyright © 2020-2023  润新知