这是以前自己练习写的一个画布时钟

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title></title>
    <style>
      canvas{
      margin: 20px 400px 0;
      }
    </style>
  </head>
  <body>
    <canvas width="500px" height="500px"></canvas>

    <script>
      var can=document.getElementsByTagName("canvas")[0];
      var x=can.getContext("2d");

      function clock(){

        //每次执行代码清楚一次画布
        x.clearRect(0,0,500,500);

        //画一个蓝色实心圆
        x.beginPath();
        x.fillStyle="blue";
        x.arc(250,250,250,Math.PI*0/180,Math.PI*360/180);
        x.fill();
        x.closePath();

        //再来一个白色填充圆,半径小于上边的蓝色填充圆,这样就会出现一个蓝色的圆环
        x.beginPath();
        x.fillStyle="#ffffff";
        x.arc(250,250,230,Math.PI*0/180,Math.PI*360/180);
        x.fill();
        x.closePath();

        //分钟刻度,通过循环画出60根分钟刻度,360/6 得出每个得间隔
        for(var i=0;i<60;i++){
          x.save(); //保存环境变量
          x.beginPath();
          x.lineWidth=2;
          x.translate(250,250);
          x.rotate(i*6*Math.PI/180); //每个刻度间隔是6° ,所以i*6 在进行旋转就画出了所有刻度
          x.moveTo(0,220);
          x.lineTo(0,230);
          x.stroke();
          x.closePath();
          x.restore();  //返回环境变量
        }

        //时钟刻度,时钟刻度只有12个所以,360/12 每个之间的间隔是30°,原理和分钟刻度相同当然你还可以循环更多,比如刻度换为数字
        for(var a=0;a<12;a++){
          x.save();
          x.beginPath();
          x.lineWidth=4;
          x.translate(250,250);
          x.rotate(a*30*Math.PI/180);
          x.moveTo(0,215);
          x.lineTo(0,230);
          x.stroke();
          x.closePath();
          x.restore();
        }

        //获取当前的本地时间,并分别获取,时,分,秒,时和分都要精确到小数点后

        var time=new Date();
        var seconds=time.getSeconds();
        var minutes=time.getMinutes()+seconds/60;
        var hours=time.getHours()+minutes/60;

        //当大于12的时候也就是要进入13点了 也就是1点  所以要减去12
        if(hours>12){
          hours=hours-12
        };

        //表盘上显示本地时间,如2017/06/14 下午 20:23

        x.beginPath()
        x.font="20px 黑体"
        x.strokeText(time.toLocaleString(),150,200)
        x.closePath();

        //时
        x.save();
        x.translate(250,250)
        x.lineWidth=4;
        x.beginPath();
        x.rotate(hours*30*Math.PI/180);//画好时针后当前的小时*30就是应该旋转的°数。
        x.moveTo(0,10);
        x.lineTo(0,-180);
        x.stroke();
        x.closePath();
        x.restore();

        //分
        x.save();
        x.beginPath();
        x.translate(250,250)
        x.lineWidth=3;
        x.rotate(minutes*6*Math.PI/180); //分针同理
        x.moveTo(0,10);
        x.lineTo(0,-200)
        x.stroke();
        x.closePath();
        x.restore();

        //秒
        x.save();
        x.beginPath();
        x.translate(250,250);
        x.lineWidth=2;
        x.rotate(seconds*6*Math.PI/180);//秒针也一样
        x.moveTo(0,10);
        x.lineTo(0,-210);
        x.stroke();
        x.closePath();
        x.restore();

        //秒针上的小圆点

        x.save();
        x.beginPath();
        x.translate(250,250);
        x.rotate(seconds*6*Math.PI/180);//让秒针小圆点随秒针位置,其实和秒针相同
        x.fillStyle="blue";
        x.arc(0,-170,4,0,Math.PI*360/180);
        x.fill();
        x.closePath();
        x.restore();

//中心蓝色小圆点

        x.beginPath();
        x.fillStyle="blue"
        x.arc(250,250,6,0,Math.PI*360/180);
        x.fill();
        x.closePath();

        //中心红色小圆点

        x.beginPath();
        x.fillStyle="red"
        x.arc(250,250,3,0,Math.PI*360/180);
        x.fill();
        x.closePath();

      }
      setInterval(clock,1000); //隔一秒运行一下这方法,先会清空掉画布然后重新画这样每秒时间都在动了。
  </script>
</body>
</html>

效果

 

canvas-菜鸟版画布时钟的更多相关文章

  1. 基于canvas的原生JS时钟效果

    概述 运用html5新增画布canvas技术,绘制时钟效果,无需引用任何插件,纯js. 详细 代码下载:http://www.demodashi.com/demo/11935.html 给大家介绍一个 ...

  2. html5 canvas简易版捕鱼达人游戏源码

    插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...

  3. Canvas组件:画布,可以实现动画操作。

    Module  10 Canvas组件:画布,可以实现动画操作. TextArea:文本域. 在单行文本域中回车会激发ActionEvent. 用CheckBoxGroup实现单选框功能. Java中 ...

  4. Canvas组件:画布,可以实现动画操作

    Canvas组件:画布,可以实现动画操作. TextArea:文本域. 在单行文本域中回车会激发ActionEvent. 用CheckBoxGroup实现单选框功能. Java中,单选框和复选框都是使 ...

  5. USBasp制作资料及全过程(菜鸟版)

    源:USBasp制作资料及全过程(菜鸟版) 一.usbasp 的一般性介绍: 1.下载线,是“ISP”(In System Programmability:“在系统编程”)或“IAP”(In Appl ...

  6. 通过Canvas + JS 实现简易时钟实战

    最近通过各种渠道学习了下html5中的canvas元素,为了练练手就随手写了一个简易的时钟.时钟本身不复杂,没有使用图片进行美化,下面就与大家分享一下具体的代码: 这是最终实现的效果: 部分的启发点来 ...

  7. 公告栏添加时钟——利用canvas画出一个时钟

    前言 最近在学习HTML5标签,学到Canvas,觉得很有趣.便在慕课网找了个demo练手.就是Canvas时钟. 对于canvas,w3shcool上是这么描述的: HTML5 <canvas ...

  8. 用canvas绘制一个简易时钟

    在见识了html5中canvas的强大,笔者准备制作一个简易时钟. 下面就是成果啦,制作之前我们先分析一下,绘制一个时钟需要做哪些准备. 一 . 1.首先这个时钟分为表盘,指针(时针,分针,秒针)和数 ...

  9. Html 5 版 电子时钟

    效果图: html 5 canvas元素  Html 5的canvas元素可以用于在网页上绘制图形[即canvas的作用]. canvas画布使用JavaScript在网页上绘制图形 其拥有绘制各种路 ...

随机推荐

  1. Linux 使用echo向文件末尾追加命令

    //echo后边用单引号包围要添加的内容 echo 'add content'>>/home/data/test.sh 注意>>表示在原来的文件末尾上进行追加,如果使用的是&g ...

  2. [HNOI2014]抄卡组

    [Luogu3234] [LOJ2208] 题解及代码 锻炼哈希码力的一道题 , 具体细节见代码 #include<cstdio> #include<cstring> #inc ...

  3. CF D - Beautiful Graph(dfs 染色问题吧)给你一个图,每个节点可以赋值1,2,3三种数字,相邻的节点的和必须是奇数,问有多少中方法。

    题意: 给你一个图,每个节点可以赋值1,2,3三种数字,相邻的节点的和必须是奇数,问有多少中方法. 分析: 很容易就可以发现如果这个图中是有奇数的环的话,那这是肯定不行的 ,否则这个环的贡献是为2^s ...

  4. HDU - 6183 动态开点线段树 || 令人绝望的线段树

    一看C才[0,50],肯定要开51棵线段树维护y区间的最小x值啦 是男人就上51棵..等等空间爆几倍了 动态开点!51棵线段树用全局节点变量控制,有点像主席树 清空工作很简单,把51个树根清掉然后回收 ...

  5. PIE SDK线元素的绘制

    1. 功能简介 在数据的处理中会用到线元素的绘制,目前PIE SDK支持ILineSymbol的线元素的绘制,LineSymbol对象是用于修饰线状对象的符号,它包括CartographicLineS ...

  6. 小众软件:Windows 下优化软件推荐—— Dism++ | 强迫症晚期患者福音 - 少数派

    Windows 下优化软件推荐—— Dism++ | 强迫症晚期患者福音 - 少数派 https://sspai.com/post/41992 官方网站免费下载

  7. Hyda爆破

    转载:http://www.cnblogs.com/bmjoker/ 2018,网站的防护(sql,xss...)的安全保护也已经上升了一个等级,但是由于管理员的安全意识薄弱,网站弱口令漏洞依然猖獗, ...

  8. 获得Windows系统的远程桌面连接历史记录

    转载:http://www.mottoin.com/tech/109219.html 渗透技巧—获得Windows系统的远程桌面连接历史记录 0x00 前言 在渗透测试中,远程桌面连接的历史记录不可忽 ...

  9. pyspark 读写csv、json文件

    from pyspark import SparkContext,SparkConf import os from pyspark.sql.session import SparkSession de ...

  10. 单一指责原则(Single Responsibility Principle) SRP

    using System; using System.Collections.Generic; using System.Text; namespace SingleResponsibilityPri ...