js计时事件实现圆形时钟


Posted in Javascript onMarch 25, 2020

本文实例为大家分享了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>

更多JavaScript时钟特效点击查看:JavaScript时钟特效专题

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

Javascript 相关文章推荐
javascript 火狐(firefox)不显示本地图片问题解决
Jul 05 Javascript
JS模块与命名空间的介绍
Mar 22 Javascript
用jquery的方法制作一个简单的导航栏
Jun 23 Javascript
基于javascript的JSON格式页面展示美化方法
Jul 02 Javascript
45个JavaScript编程注意事项、技巧大全
Feb 11 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
Apr 08 Javascript
node.js学习之交互式解释器REPL详解
Dec 08 Javascript
vue2笔记 — vue-router路由懒加载的实现
Mar 03 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
Apr 13 Javascript
老生常谈JS中的继承及实现代码
Jul 06 Javascript
详解JavaScript修改注册表的方法
Jan 05 Javascript
Vue组件为什么data必须是一个函数
Jun 11 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
Oct 24 #Javascript
vue项目使用.env文件配置全局环境变量的方法
Oct 24 #Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
Oct 24 #Javascript
nest.js 使用express需要提供多个静态目录的操作方法
Oct 24 #Javascript
Vue 3.0双向绑定原理的实现方法
Oct 23 #Javascript
JavaScript判断数组类型的方法
Oct 23 #Javascript
Vue 2.0双向绑定原理的实现方法
Oct 23 #Javascript
You might like
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
JavaScript中的Document文档对象
2008/01/16 Javascript
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
基于Jquery的温度计动画效果
2010/06/18 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
爬山算法简介和Python实现实例
2014/04/26 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Python数组定义方法
2016/04/13 Python
Windows下搭建python开发环境详细步骤
2020/07/20 Python
python中协程实现TCP连接的实例分析
2018/10/14 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
python列表list保留顺序去重的实例
2018/12/14 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
行政处罚事先告知书
2015/07/01 职场文书
活动宣传稿范文
2015/07/23 职场文书
初中生活随笔
2015/08/15 职场文书