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 原型学习总结
Oct 29 Javascript
IE的有条件注释判定IE版本详解(附实例代码)
Jan 04 Javascript
javascript简单事件处理和with用法介绍
Sep 16 Javascript
js全选实现和判断是否有复选框选中的方法
Feb 17 Javascript
AspNet中使用JQuery boxy插件的确认框
May 20 Javascript
js导出excel文件的简洁方法(推荐)
Nov 02 Javascript
JS动态添加的div点击跳转到另一页面实现代码
Sep 30 Javascript
细说webpack源码之compile流程-入口函数run
Dec 26 Javascript
Angular2 父子组件通信方式的示例
Jan 29 Javascript
JS使用setInterval实现的简单计时器功能示例
Apr 19 Javascript
VueCli3构建TS项目的方法步骤
Nov 07 Javascript
VSCode插件安装完成后的配置(常用配置)
Aug 24 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后台程序与Javascript的两种交互方式
2009/10/25 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
基于jquery的跨域调用文件
2010/11/19 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
Python的ORM框架SQLAlchemy入门教程
2014/04/28 Python
python标准算法实现数组全排列的方法
2015/03/17 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
Python搭建代理IP池实现接口设置与整体调度
2019/10/27 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
会计专业毕业生自我鉴定
2013/10/29 职场文书
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
早会开场白台词大全
2015/06/01 职场文书
2016年母亲节广告语
2016/01/28 职场文书
mysql分表之后如何平滑上线详解
2021/11/01 MySQL
nginx中proxy_pass各种用法详解
2021/11/07 Servers
python使用torch随机初始化参数
2022/03/22 Python