Canvas画钟 js
用Canvas模拟了webQQ里头的那个钟。下图左侧是webQQ的原版,右侧是画出来的。效果预览
画的过程中都还比较顺利,只是最里边的那个小圆顶部有一点点小渐变,花了不少功夫 。
用得比较多的是旋转部分的代码,得先存之前的位置,然后再旋转,再恢复到原来的属性继续往下画。
HTML部分:
<!DOCTYPE HTML><html><head><meta chaset="utf-8" /><title>Canvas Clock</title><style> a{color:#333;margin:0 10px;font-size:24px;} .ts{width:850px;text-align:center; height:100px;position:absolute;left:50%;top:50%;margin-top:-55px;margin-left:-405px;border:1px dotted #778855;background:#F5F5F5;padding:10px;}</style></head><body></body></html>
JS部分:
(function(){/* Author:Jin.dh Date:2012/3/5*/function isIE(){ var userAgent = navigator.userAgent; var isOpera = userAgent.indexOf("Opera") > -1; var IE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera ; return IE; }; var box = { w:150, h:150, b:"#ccc" }; var clockAttr ={ x:75, r:75, y:75 }; //创建容器 function $C(tag,father){var o = document.createElement(tag||"div"); father = father || document.body; father.appendChild(o);return o; }; //计时器 var autoId = null;//初始化 function init(){if(isIE()){var tsHTML = "<div class='ts'><h1 style='color:#f00'>您的浏览器暂不支持本Demo,请换成下面的浏览器试试:</h1>"; tsHTML+=" <a href='http://www.google.cn/chrome/intl/zh-CN/landing_chrome.html' target='_blank'>chrome</a><a href='http://www.firefox.com.cn/download/' target='blank'>firefox</a><a href='http://www.opera.com/' target='_blank'>opera</a><a href='http://www.apple.com.cn/safari/' target='_blank'>safari</a></div>"; document.body.innerHTML = tsHTML;return false; }; canvas = $C("canvas"); canvas.width = box.w; canvas.height = box.h; ctx = canvas.getContext("2d"); go();//开始 }; function go(){ autoId = setTimeout(function(){ drew(); go(); },1000); } //画钟 function drew(){ ctx.clearRect(0,0,box.w,box.h)var now = new Date();var h = now.getHours();var m = now.getMinutes();var s = now.getSeconds();var rGrd =ctx.createRadialGradient(clockAttr.r, clockAttr.r, clockAttr.r-20, clockAttr.r, clockAttr.r, clockAttr.r); //创建线形渐变 rGrd.addColorStop(1, '#343537'); //最外边的颜色 rGrd.addColorStop(0.2,'#424242'); //靠近内层颜色 rGrd.addColorStop(0, '#fff'); //内圆 ctx.beginPath(); ctx.arc(clockAttr.x,clockAttr.y,clockAttr.r,0,Math.PI*2,true); ctx.fillStyle = rGrd; ctx.fill(); ctx.closePath(); ctx.save();//存Canvas原坐标 ctx.translate(clockAttr.r,clockAttr.r);//移动坐标 ctx.strokeStyle = "#ccc";for(var i =0;i<12;i++){ ctx.beginPath(); ctx.moveTo(0,-clockAttr.r+20); //始点 ctx.lineTo(0,-clockAttr.r+26); //终点 ctx.lineWidth = 1; //线宽 if(i%3===0){ //如果是3/6/9/12则加粗线条,颜色加深 ctx.strokeStyle = "#333"; ctx.lineWidth = 2; }; ctx.stroke(); ctx.closePath(); ctx.rotate(360/12*Math.PI/180); //旋转画布 }; ctx.restore(); //时针 ctx.save();//存Canvas原坐标 ctx.translate(clockAttr.r,clockAttr.r);//移动坐标 ctx.lineWidth = 8;//Math.PI/180为弧度算法.请参考数学“弧度”算法。 ctx.rotate((h*60+m)*(360/(12*60))*Math.PI/180); //弧度=当前分 * 每分多少度 ctx.beginPath(); ctx.moveTo(0,0); ctx.lineTo(0,-30); ctx.stroke(); ctx.closePath(); ctx.restore(); //分针 ctx.save();//存Canvas原坐标 ctx.translate(clockAttr.r,clockAttr.r);//移动坐标 ctx.rotate((m*60+s)*(360/(60*60))*Math.PI/180); //弧度=当前秒 * 每秒多少度 ctx.fillStyle = "#000"; ctx.beginPath(); ctx.moveTo(0,0); ctx.lineTo(0,-42); ctx.lineWidth = 5; ctx.stroke(); ctx.closePath(); ctx.restore(); //秒针 ctx.save();//存Canvas原坐标 ctx.translate(clockAttr.r,clockAttr.r);//移动坐标 ctx.lineWidth = 3; ctx.rotate(s*(360/60)*Math.PI/180);//弧度=当前秒 * 每秒多少度 ctx.beginPath(); ctx.moveTo(0,0); ctx.lineTo(0,-45); ctx.stroke(); ctx.closePath(); ctx.restore(); //中心圆点 ctx.beginPath(); ctx.arc(clockAttr.x,clockAttr.y,10,0,2*Math.PI,true); ctx.fillStyle = "#424242"; ctx.fill(); ctx.closePath(); ctx.beginPath(); var linear = ctx.createLinearGradient(clockAttr.x-10,clockAttr.y-10,clockAttr.x-10,clockAttr.y-8); linear.addColorStop(0,"#ffffff"); linear.addColorStop(1,"#424242"); ctx.arc(clockAttr.x,clockAttr.y,10,0,2*Math.PI,true); ctx.fillStyle = linear; ctx.fill(); ctx.closePath(); }; //window onlaod function addLoad(fn){var old = window.onload;if(typeof old == "function"){ window.onload = function(){ fn(); old(); } }else{ window.onload = fn; } }; addLoad(init);//初始化 })();
转载于:https://www.cnblogs.com/webstarting/archive/2012/03/05/2380540.html
Canvas画钟 js相关推荐
- 用canvas画钟,实时变化的钟
先上代码,详解之后补上 <!DOCTYPE html> <html lang="en"> <head><meta charset=&quo ...
- 用php语句绘制圆锥,JS、canvas画一个圆锥实现代码
本文主要给大家讲解html中用canvas函数配合JS画出一个圆锥形的图形实例,有需要的朋友学习测试下吧,希望能帮帮助到大家. 以下是我们给大家分享是实例代码: 我的第一个 HTML 页面 const ...
- 用php语句绘制圆锥,JS+canvas画一个圆锥实例代码_javascript技巧
本篇文章给大家讲解html中用canvas函数配合JS画出一个圆锥形的图形实例,canvas是html5中新增加的新属性,对HTML5中的canvas感兴趣的朋友学习测试下吧. 以下是我们给大家分享是 ...
- 【学习随记】原生js canvas 画海报
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- 实现js动态创建img并使用canvas画线连接
实现js动态创建img,使用canvas画线连接img,当背景图更换时,重新绘制img及连接线. 前台页面 @{ Layout = null; } <!DOCTYPE html> ...
- 基于canvas的原生JS时钟效果
概述 运用html5新增画布canvas技术,绘制时钟效果,无需引用任何插件,纯js. 详细 代码下载:http://www.demodashi.com/demo/11935.html 给大家介绍一个 ...
- 关于星空的java小程序_[Java教程]小程序使用Canvas画饼图_星空网
小程序使用Canvas画饼图 2018-10-24 0 先上效果图 -------------------------------------------------------------w --- ...
- canvas笔记-使用canvas画圆及点阵的使用
如下例子: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF- ...
- HTML5 Canvas 画虚线组件
前段时间由于项目需要,用到了HTML5 Canvas画图,但是没有画虚线的方法,自己写了一个HTML5 画虚线的组件. dashedLine.js 1 if (window.CanvasRenderi ...
最新文章
- Visual Studio 2013编译Mozilla NPAPI 示例注意事项
- Java 调用 C++ (Java 调用 dll)康哥手把手教你
- php 日志处理工具 SeasLog 的使用
- 【代码规范】prettier
- svn在commit后报错:is scheduled for addition, but is missing
- 【视频课】一课彻底掌握深度学习图像分类各种问题,学习CV你值得拥有
- 六大Web负载均衡原理与实现
- Android应用开发实例篇(1)-----简易涂鸦板
- CentOS网络设置 couldn‘t resolve host ‘mirrorlist.centos.org问题解决
- 多线程程序中操作的原子性--转帖
- oracle get wkt,Bing Maps开发扩展:Oracle Spatial的空间数据渲染
- .NET(C#):觉察XML反序列化中的未知节点
- Scala深入浅出实战初级入门经典视频课程
- 微信小程序之倒计时插件 wxTimer
- Unity3D 场景中图片模糊问题
- 上传文件资料并生成缩略图
- java合并word_java实现合并多个word文档 且可换页 实例代码(基于docx4j)
- 非常实用的开发小工具
- 思考者的回归--转帖今何在的优美文章《窗》之三
- IP-guard功能详解——屏幕监控
热门文章
- 伯德图 matlab,Matlab/Simulink中bode图的画法
- java 抽象方法 大括号_为什么Java抽象类的方法必须加大括号?我写错了吗?
- 如何创建 ESXi 安装程序 USB 闪存驱动器
- 计算机网络脆弱性评估技术研究
- 1658页!又一份神级的Java手册面世
- LeetCode 1658. 将 x 减到 0 的最小操作数
- 网易邮箱登录页面html5布局,css实现tab效果仿163邮箱样式
- 深入理解Oracle中的case when then else end
- UIQ的CEikEdwin文本框怎么设置自动滚动(转)
- 今年诺贝尔奖得主居然把这事研究清楚了:学历和收入到底有多大关系?