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 兼容FF的onmouseenter和onmouseleave的代码
Jul 19 Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
Aug 03 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
Aug 14 Javascript
JS倒计时代码汇总
Nov 25 Javascript
JavaScript去除数组里重复值的方法
Jul 13 Javascript
javascript实现任务栏消息提示的简单实例
May 31 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
Jun 03 Javascript
微信小程序 条件渲染详解
Oct 09 Javascript
微信小程序 wx:for的使用实例详解
Apr 27 Javascript
小程序多图列表实现性能优化的方法步骤
May 28 Javascript
vue之延时刷新实例
Nov 14 Javascript
微信小程序swiper实现文字纵向轮播提示效果
Jan 21 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持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
jquery中event对象属性与方法小结
2013/12/18 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
jquery获取复选框被选中的值
2014/03/22 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
Vue使用lodop实现打印小结
2019/07/06 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
Python实现压缩和解压缩ZIP文件的方法分析
2017/09/28 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
Python中关于浮点数的冷知识
2019/09/22 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
python中实现词云图的示例
2020/12/19 Python
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
小学生红领巾广播稿
2014/01/21 职场文书
股指期货心得体会
2014/09/10 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
护理工作心得体会
2016/01/22 职场文书