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 相关文章推荐
得到form下的所有的input的js代码
Nov 07 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
Mar 04 Javascript
jQuery实现的多屏图像图层切换效果实例
May 07 Javascript
javascript HTML+CSS实现经典橙色导航菜单
Feb 16 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
Apr 11 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
May 09 Javascript
微信小程序 下拉列表的实现实例代码
Mar 08 Javascript
JavaScript实现类似淘宝的购物车效果
Mar 16 Javascript
浅析JS中什么是自定义react数据验证组件
Oct 19 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
Mar 08 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
Mar 19 Javascript
微信浏览器左上角返回按钮监听的实现
Mar 04 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中 $$str 中 &quot;$$&quot; 的详解
2015/07/06 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
2017/03/28 PHP
thinkphp分页集成实例
2017/07/24 PHP
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
Vue 3.0 前瞻Vue Function API新特性体验
2019/08/12 Javascript
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
python list转dict示例分享
2014/01/28 Python
Python中的startswith和endswith函数使用实例
2014/08/25 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
python多线程使用方法实例详解
2019/12/30 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
在python中使用nohup命令说明
2020/04/16 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
机械绘图员岗位职责
2013/11/19 职场文书
行政部总经理岗位职责
2014/01/04 职场文书
校园之声广播稿
2014/01/31 职场文书
酒店总经理职务说明书
2014/02/26 职场文书
企业文化演讲稿
2014/05/20 职场文书
执行力心得体会范文
2016/01/11 职场文书
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers