js计时事件实现圆形时钟

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

代码:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8"/>
 <title>时钟</title>
 <style>
  *{margin: 0; padding: 0;}

  div.dd{
   margin: 0 auto;
   width: 400px;
   padding-top: 100px;
  }
 </style>
</head>
<body>
<div class="dd">
 <canvas id="clock" height="400px" width="400px">你的浏览器不支持canvas</canvas>
</div>
<script type="text/javascript">
 (function(doc){
  var can = doc.getElementById("clock");
  var con = can.getContext("2d");//创建一个2d上下文
  con.translate(200, 200);//重新确定坐标原点(确定圆心位置)

  //外圆
  con.beginPath();
  con.fillStyle = '#fff';
  con.arc(0, 0, 200, 0, Math.PI*2, false);
  con.fill();

  //内圆
  con.beginPath();
  con.fillStyle = '#aaa';
  con.arc(0, 0, 195, 0, Math.PI*2, false);
  con.fill();

  //绘制刻度
  con.beginPath();
  con.font = "bold 20px sans-serif";
  con.textAlign = "center";
  con.textBaseline = "middle"
  con.fillStyle = '#000000';
  con.fillText("12", 0, -170);
  con.fillText("3",170,0);
  con.fillText("6",0,170);
  con.fillText("9",-170,0);
  con.fillText("1",84,-147.224);
  con.fillText("2",147.224,-84);
  con.fillText("4",147.224,84);
  con.fillText("5",84,147.224);
  con.fillText("7",-84,147.224);
  con.fillText("8",-147.224,84);
  con.fillText("10",-147.224,-84);
  con.fillText("11",-84,-147.224);

  //获取当前时间
  var d = new Date(), time ={};
  time.H = d.getHours()%12;
  time.M = d.getMinutes();
  time.S = d.getSeconds();

  function getTime(){
   time.S++;
   if(time.S > 59){
    time.S = 0;
    time.M++;
    if(time.M > 60){
     time.M = 0;
     time.H++;
     if(time.H > 11){
      time.H = 0;
     }
    }
   }
   canvasTimeLine();
  }

  //将角度转为弧度
  function numToDeg(num){
   return ((num*6 - 90)*0.0174444444444444);

  }
  //确定刻度位置
  function computePositionByLenDeg(len, deg){
   return {
    x: len*Math.cos(deg),
    y: len*Math.sin(deg)
   }
  }
  //绘制刻度
  function canvasLineMintus(){
   for(var i = 0;i<60; i++){
    var rec = 180;
    con.beginPath();
    con.lineWidth = 4;
    if(i%5 != 0){
     con.lineWidth = 1;
     rec = 184
    }

    var beinDeg = numToDeg(i),
      beginPot = computePositionByLenDeg(rec, beinDeg),
      endPot = computePositionByLenDeg(190, beinDeg);
    con.moveTo(beginPot.x, beginPot.y);
    con.lineTo(endPot.x, endPot.y);
    con.stroke();
   }
  }

  function canvasTimeLine(){
   var sDeg = numToDeg(time.S),
     mDeg = numToDeg(time.M),
     hDeg = numToDeg(time.H*5 + Math.floor(time.M/12)),
     sPot = computePositionByLenDeg(150, sDeg),
     mPot = computePositionByLenDeg(135, mDeg),
     hPot = computePositionByLenDeg(110, hDeg);

   //时钟表面
   con.beginPath();
   con.fillStyle = '#ddd';
   con.arc(0, 0, 156, 0, Math.PI*2, false);
   con.fill();

   //时针
   con.beginPath();
   con.moveTo(0, 0);
   con.lineTo(hPot.x, hPot.y);
   con.lineWidth = 6;
   con.strokeStyle = "#333";
   con.stroke();

   //分针
   con.beginPath();
   con.moveTo(0, 0);
   con.lineTo(mPot.x, mPot.y);
   con.lineWidth = 4;
   con.strokeStyle = "#333";
   con.stroke();

   //秒针
   con.beginPath();
   con.moveTo(0, 0);
   con.lineTo(sPot.x, sPot.y);
   con.lineWidth = 2;
   con.strokeStyle = "#ff0000";
   con.stroke();

   //针心
   con.beginPath();
   con.fillStyle = '#aaaaaa';
   con.arc(0, 0, 8, 0, Math.PI*2, false);
   con.fill();
   con.beginPath();
   con.fillStyle = '#f00';
   con.arc(0, 0, 4, 0, Math.PI*2, false);
   con.fill();

  }
  canvasLineMintus();
  getTime();

  setInterval(getTime, 1000);

 })(document);
</script>
</body>
</html>

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

(0)

相关推荐

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

    之前学习了下html5中的canvas元素,为了练练手就实现了一个简易的时钟.时钟本身并不复杂,也没有使用图片进行美化,不过麻雀虽小五脏俱全,下面就与大家分享一下: 演示效果: html代码: 复制代码 代码如下: <!DOCTYPE html> <html> <head>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  • js Canvas绘制圆形时钟教程

    本文实例为大家分享了Canvas绘制圆形时钟的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>canvas-clock</title> </head> <body> <canvas id="canvas" width=&

  • JavaScript Canvas绘制圆形时钟效果

    本文实例为大家分享了Canvas时钟效果展示的具体代码,供大家参考,具体内容如下 <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> canvas{ display: block; margin: 0 auto; background-color: #fdffad; border: 1px solid #0

  • js Canvas实现圆形时钟教程

    阅读本文需要一点关于canvas基本用法的基础,本文实例为大家分享了HTML5 Canvas实现圆形时钟简易教程 第一步:新建一个最简单的html文件,并且在<body>标签中定义元素canvas. canvas.html <html> <head> <title>Canvas clock tutorial</title> </head> <body> <canvas id="clock" wid

  • 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

  • js计时事件实现圆形时钟

    本文实例为大家分享了js圆形时钟效果的具体代码,供大家参考,具体内容如下 代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>时钟</title> <style> *{margin: 0; padding: 0;} div.dd{ margin: 0 auto; width: 400px; padding-top: 100px

  • JS+HTML实现的圆形可点击区域示例【3种方法】

    本文实例讲述了JS+HTML实现的圆形可点击区域.分享给大家供大家参考,具体如下: 方法一: <img>通过usemap映射到<map>的circle形<area>. <img src="images/lanlvseImg.png" usemap="#Map" /> <map name="Map" id="Map"> <area shape="circ

  • 详解JS浏览器事件循环机制

    先来明白些概念性内容. 进程.线程 进程是系统分配的独立资源,是 CPU 资源分配的基本单位,进程是由一个或者多个线程组成的. 线程是进程的执行流,是CPU调度和分派的基本单位,同个进程之中的多个线程之间是共享该进程的资源的. 浏览器内核 浏览器是多进程的,浏览器每一个 tab 标签都代表一个独立的进程(也不一定,因为多个空白 tab 标签会合并成一个进程),浏览器内核(浏览器渲染进程)属于浏览器多进程中的一种. 浏览器内核有多种线程在工作. GUI 渲染线程: 负责渲染页面,解析 HTML,C

  • 深入理解JS DOM事件机制

    1.事件流 html 元素触发事件的顺序. 2.事件冒泡IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档).3.事件捕获事件捕获的思想是不太具体的节点应该更早的接收到事件,而最具体的节点应该在最后接收到节点.事件捕获的用意在于事件到达预定目标之前捕获它. DOM事件流 "DOM2级事件流"规定的事件流包括三个阶段:事件捕获阶段.处于目标阶段和冒泡阶段.首先发生的是事件捕获,

  • JavaScript事件学习小结(五)js中事件类型之鼠标事件

    相关阅读: JavaScript事件学习小结(五)js中事件类型之鼠标事件 http://www.jb51.net/article/86259.htm JavaScript事件学习小结(一)事件流 http://www.jb51.net/article/86261.htm javaScript事件学习小结(四)event的公共成员(属性和方法) http://www.jb51.net/article/86262.htm JavaScript事件学习小结(二)js事件处理程序 http://www

  • js运动事件函数详解

    本文实例为大家分享了js运动事件函数,供大家参考,具体内容如下 HTML <div id="breedsdog"> <h2 class="title">The Dog</h2> <p class="describe">Split between cat,belong to the cat family,cat,cat,is the world's more widely<br> in t

  • js添加事件的通用方法推荐

    js添加事件的通用方法推荐 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <p id="p1">测试添加事件:firefox使用addEventListener,ie使用attachEvent<br> 点击此p标签,绑定了2个弹

随机推荐