JavaScript Canvas绘制圆形时钟效果


Posted in Javascript onAugust 20, 2020

本文实例为大家分享了Canvas时钟效果展示的具体代码,供大家参考,具体内容如下

<html lang="en"> 
<head> 
 <meta charset="UTF-8"> 
 <title></title> 
 <style> 
 canvas{ 
  display: block; 
  margin: 0 auto; 
  background-color: #fdffad; 
  border: 1px solid #000; 
 } 
 </style> 
 <script type="text/javascript"> 
 
 document.addEventListener('DOMContentLoaded',function(){ 
  var oC=document.querySelector('canvas'); 
  var gd=oC.getContext('2d'); 
  var r=oC.width/2; 
 
  function drawBackground() { 
  gd.save(); 
  //渐变 
 
  var ra = gd.createLinearGradient(600, 0, 400, 0); 
  ra.addColorStop(1, '#2dd9ff'); 
  ra.addColorStop(0, '#8c48dd'); 
 
  //表盘 
  gd.translate(r, r); 
  gd.beginPath(); 
  gd.fillStyle = ra; 
  gd.lineWidth = 10; 
  gd.strokeStyle = '#211f4e'; 
  gd.arc(0, 0, r-5, 0, Math.PI *2, false); 
  gd.fill(); 
  gd.stroke(); 
  //数字 
  for (var i = 1; i < 13; i++) { 
   var rad=i * Math.PI * 2 / 12; 
   var x = Math.sin(rad)*(r-70); 
   var y= -Math.cos(rad)*(r-70); 
   gd.fillStyle = "red"; 
   gd.font = "bold 80px Calibri"; 
   gd.lineWidth = 1; 
   gd.textAlign = 'center'; 
   gd.textBaseline = 'middle'; 
   gd.strokeText(i, x, y); 
  } 
  //点 
  for (var i = 0; i < 60; i++) { 
   gd.beginPath(); 
   var rad=i * Math.PI * 2 / 60; 
   var x = Math.sin(rad)*(r-30); 
   var y= -Math.cos(rad)*(r-30); 
   if (i % 5 == 0) { 
   gd.fillStyle = 'red'; 
   } 
   else { 
   gd.fillStyle = '#ccc' 
   } 
   gd.lineWidth = 2; 
   gd.arc(x, y, 6, 0, Math.PI * 2, false); 
   gd.fill(); 
   gd.stroke(); 
   gd.closePath(); 
  } 
  } 
  //时针 
  function drawHour(h,m){ 
  gd.save(); 
  gd.beginPath(); 
  var rad=2*Math.PI/12*h; 
  var mrad=2*Math.PI/12/60*m; 
  gd.rotate(rad+mrad); 
  gd.lineWidth=20; 
  gd.lineCap='round'; 
  gd.moveTo(0,10); 
  gd.lineTo(0,-r/3); 
  gd.stroke(); 
  gd.closePath(); 
  gd.restore(); 
  } 
  //分针 
  function drawMinutes(m){ 
  gd.save(); 
  gd.beginPath(); 
  var rad=2*Math.PI/60*m; 
  gd.rotate(rad); 
  gd.lineWidth=10; 
  gd.lineCap='round'; 
  gd.moveTo(0,10); 
  gd.lineTo(0,-r/2); 
  gd.stroke(); 
  gd.closePath(); 
  gd.restore(); 
  } 
  //秒针 
  function drawSeconds(s){ 
  gd.save(); 
  gd.beginPath(); 
  var rad=2*Math.PI/60*s; 
  gd.rotate(rad); 
  gd.fillStyle='red'; 
  gd.moveTo(-2,20); 
  gd.lineTo(2,20); 
  gd.lineTo(1,-r+100); 
  gd.lineTo(-1,-r+100); 
  gd.fill(); 
  gd.closePath(); 
  gd.restore(); 
  } 
  //圆点 
  function drawPoint(){ 
  gd.beginPath(); 
  gd.fillStyle='#fff'; 
  gd.arc(0,0,5,Math.PI*2,false); 
  gd.fill(); 
  } 
 
  function drawClock(){ 
  gd.clearRect(0,0,oC.width,oC.height); 
  var oDate=new Date(); 
  var h=oDate.getHours(); 
  var m=oDate.getMinutes(); 
  var s=oDate.getSeconds(); 
  drawBackground(); 
  drawHour(h,m); 
  drawMinutes(m); 
  drawSeconds(s); 
  drawPoint(); 
  gd.restore(); 
 
  } 
  drawClock(); 
  setInterval(drawClock,1000); 
 },false); 
 </script> 
</head> 
<body> 
<canvas width="800" height="800"></canvas> 
</body> 
</html>

效果图:

JavaScript Canvas绘制圆形时钟效果

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

Javascript 相关文章推荐
javascript编程起步(第六课)
Feb 27 Javascript
JavaScript 直接操作本地文件的实现代码
Dec 01 Javascript
javascript常用函数(1)
Nov 04 Javascript
jquery实现简单的全选和反选功能
Jan 02 Javascript
批量下载对路网图片并生成html的实现方法
Jun 07 Javascript
详解自动生成博客目录案例
Dec 09 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
Dec 12 Javascript
基于dataset的使用和图片延时加载的实现方法
Dec 11 Javascript
JS中DOM元素的attribute与property属性示例详解
Sep 04 Javascript
Vuex的各个模块封装的实现
Jun 05 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 Javascript
vue首次渲染全过程
Apr 21 Vue.js
基于JavaScript实现的插入排序算法分析
Apr 14 #Javascript
基于JavaScript实现的折半查找算法示例
Apr 14 #Javascript
AngularJS之自定义服务详解(factory、service、provider)
Apr 14 #Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 #Javascript
vue组件中点击按钮后修改输入框的状态实例代码
Apr 14 #Javascript
angularjs实现首页轮播图效果
Apr 14 #Javascript
如何使用bootstrap框架 bootstrap入门必看!
Apr 13 #Javascript
You might like
php fckeditor 调用的函数
2009/06/21 PHP
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
2016/12/18 Javascript
详解vue-validator(vue验证器)
2017/01/16 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
2019/11/01 jQuery
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
线程和进程的区别及Python代码实例
2015/02/04 Python
Python数据结构之图的应用示例
2018/05/11 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
自荐信格式的六要素
2013/09/21 职场文书
离婚协议书范本2014
2014/10/27 职场文书
数学教师个人总结
2015/02/06 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
演讲开场白和结束语
2015/05/29 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript