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 相关文章推荐
使用prototype.js 的时候应该特别注意的几个问题.
Apr 12 Javascript
jQuery 动画基础教程
Dec 25 Javascript
json 实例详细说明教程
Oct 31 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
Aug 28 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 Javascript
JavaScript中使用Callback控制流程介绍
Mar 16 Javascript
Augularjs-起步详解
Jul 08 Javascript
JavaScript仿微博发布信息案例
Nov 16 Javascript
js实现微博发布小功能
Jan 12 Javascript
详解Vue-基本标签和自定义控件
Mar 24 Javascript
Vue中使用webpack别名的方法实例详解
Jun 19 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
Dec 17 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实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
ES6 系列之 Generator 的自动执行的方法示例
2018/10/19 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
CentOS7下python3.7.0安装教程
2018/07/30 Python
python os.path模块常用方法实例详解
2018/09/16 Python
python按照多个条件排序的方法
2019/02/08 Python
基于django传递数据到后端的例子
2019/08/16 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
小学教师师德反思
2014/02/03 职场文书
高三毕业典礼演讲稿
2014/05/13 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
贪污检举信范文
2015/03/02 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
排查MySQL生产环境索引没有效果
2022/04/11 MySQL