js Canvas绘制圆形时钟效果

 更新时间:2017年02月17日 17:02:51   作者:Android丶Ren  
这篇文章主要为大家详细介绍了js Canvas绘制圆形时钟效果的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了js Canvas圆形时钟的具体实现代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Canvas Clock</title>
    <style type="text/css">

      div{
        text-align: center;
        margin-top: 250px;
      }
      #clock{

        border: 1px solid #ccc;
      }
    </style>
  </head>
  <body>
    <div>
      <canvas id="clock" height="200px" width="200px"></canvas>
    </div>

    <script type="text/javascript" src="js/clock.js"></script>
  </body>
</html>

js

var dom=document.getElementById('clock');
var cxt=dom.getContext("2d");
var width=cxt.canvas.width;
var height=cxt.canvas.height;
var r=width/2;

function drawBackground(){
  cxt.save();
  cxt.translate(r,r);
  cxt.beginPath();
  cxt.lineWidth=10;
  cxt.arc(0,0,r-5,0,2*Math.PI,false);
  cxt.stroke();
  cxt.font="18px Arial";
  cxt.textAlign='center'
  cxt.textBaseline='middle'
  var hourNums=[3,4,5,6,7,8,9,10,11,12,1,2];
  hourNums.forEach(function(number,i){

    var rad=2*Math.PI/12*i;
    var x=Math.cos(rad)*(r-30);
    var y=Math.sin(rad)*(r-30);
    cxt.fillText(number,x,y);

  });

  for(var i=0;i<60;i++){

    var rad=2*Math.PI/60*i;
    var x=Math.cos(rad)*(r-18);
    var y=Math.sin(rad)*(r-18);
    cxt.beginPath();
    if(i % 5===0){
      cxt.fillStyle="#000"
      cxt.arc(x,y,2,0,2*Math.PI,false);
    }
    else{
      cxt.fillStyle="#ccc"
      cxt.arc(x,y,2,0,2*Math.PI,false);
    }
    cxt.fill(); 
  }

}

function drawHour(hour,minute){
  cxt.save();
  cxt.beginPath();
  var rad=2*Math.PI/12*hour;
  var mrad=2*Math.PI/12/60*minute
  cxt.rotate(rad+mrad);
  cxt.lineWidth=6;
  cxt.lineCap='round'
  cxt.moveTo(0,10);
  cxt.lineTo(0,-r/2);
  cxt.stroke();
  cxt.restore();
}

function drawMinute(minute){
  cxt.save();
  cxt.beginPath();
  var rad=2*Math.PI/60*minute;
  cxt.rotate(rad);
  cxt.lineWidth=3;
  cxt.lineCap='round'
  cxt.moveTo(0,10);
  cxt.lineTo(0,-r+30);
  cxt.stroke();
  cxt.restore();
}

function drawSecond(second){
  cxt.save();
  cxt.beginPath();
  cxt.fillStyle='#c14543'
  var rad=2*Math.PI/60*second;
  cxt.rotate(rad);  
  cxt.moveTo(-2,20);
  cxt.lineTo(2,20);
  cxt.lineTo(1,-r+18);
  cxt.lineTo(-1,-r+18);
  cxt.fill();
  cxt.restore();
}

function drawDot(){

  cxt.beginPath();
  cxt.fillStyle='#fff'
  cxt.arc(0,0,3,0,2*Math.PI,false);
  cxt.fill();
}

function draw(){

  cxt.clearRect(0,0,width,height);
  var now=new Date();
  var hour=now.getHours();
  var minute=now.getMinutes();
  var second=now.getSeconds();
  drawBackground();
  drawHour(hour,minute);
  drawMinute(minute);
  drawSecond(second);
  drawDot();
  cxt.restore();
}
draw();
setInterval(draw,1000);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JavaScript模拟实现封装的三种方式及写法区别

    JavaScript模拟实现封装的三种方式及写法区别

    JS是一门面向对象语言,其对象是用prototype属性来模拟的。下面通过本文来了解下js模拟实现封装的三种方法,需要的朋友参考下吧
    2017-10-10
  • javascript中if和switch,==和===详解

    javascript中if和switch,==和===详解

    这篇文章主要给大家详细介绍了javascript中if和switch,==和===的区别和联系,十分的细致实用,有需要的小伙伴可以参考下。
    2015-07-07
  • JavaScript汉诺塔问题解决方法

    JavaScript汉诺塔问题解决方法

    这篇文章主要介绍了JavaScript汉诺塔问题解决方法,涉及javascript递归调用操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • js中scrollTop()方法和scroll()方法用法示例

    js中scrollTop()方法和scroll()方法用法示例

    这篇文章主要介绍了js中scrollTop()方法和scroll()方法用法,结合实例形式分析了scrollTop()方法和scroll()方法滚动操作的用法与相关操作技巧,需要的朋友可以参考下
    2016-10-10
  • JavaScript 使用Ckeditor+Ckfinder文件上传案例详解

    JavaScript 使用Ckeditor+Ckfinder文件上传案例详解

    这篇文章主要介绍了JavaScript 使用Ckeditor+Ckfinder文件上传案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • javascript结合Canvas 实现简易的圆形时钟

    javascript结合Canvas 实现简易的圆形时钟

    本文给大家分享的是javascript结合Canvas 实现简易的圆形时钟,主要是对自己前段时间学习html5的canvas的一次小检验,这里推荐给小伙伴们,有需要的可以参考下。
    2015-03-03
  • JS循环遍历ul中li的点击事件给选中li添加css样式(示例代码)

    JS循环遍历ul中li的点击事件给选中li添加css样式(示例代码)

    对于一个ul中固定的li个数,当点击其中一个li时,改变选中li的颜色;同时改变对应的另一个ul中li的颜色,怎么实现这个功能呢,下面小编给大家带来了js循环遍历ul中li的点击事件,给给选中li添加css样式,感兴趣的朋友一起看看吧
    2023-07-07
  • javascript计算对象长度的方法

    javascript计算对象长度的方法

    这篇文章主要为大家详细介绍了javascript计算对象长度的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • TypeScript 引用资源文件后提示找不到的异常处理技巧

    TypeScript 引用资源文件后提示找不到的异常处理技巧

    这篇文章主要介绍了TypeScript 引用资源文件后提示找不到的异常处理,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • JavaScript深拷贝的一些踩坑记录

    JavaScript深拷贝的一些踩坑记录

    这篇文章主要给大家介绍了关于JavaScript深拷贝的一些踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论