使用html5 canvas 画时钟代码实例分享


Posted in HTML / CSS onNovember 11, 2015

HTML5足够强大实现很多功能,画一个时钟只是一个小玩意。图片指针用ctx的drawImage可以实现。至于兼容性问题,网上的解决方案已经很多了。这个东东是用来玩的,不是用来做应用的,学习下canvas API。

先给大家展示效果图

使用html5 canvas 画时钟代码实例分享

实现代码

复制代码
代码如下:

<script type="text/javascript">
// <![CDATA[
var time = new Date();
var h = time.getHours();
var m = time.getMinutes();
var s = time.getSeconds();
var weekday={:'星期日',:'星期一',:'星期二',:'星期三',:'星期四',:'星期五',:'星期六'};
h=h>?(h-)*+parseInt(m/):h*+parseInt(m/); //时针 初始位置
//=====================================
var x=,y=,sAngle=; //x y 原点 秒针角度变量
function draw()
{
var c=document.getElementById("myCanvas");
var ctx=c.getContext("d");
ctx.clearRect(,,c.width,c.height);
s++;//秒针
//背景
ctx.fillStyle = '#eee' // Make changes to the settings
ctx.globalAlpha = .;
ctx.fillRect(,,c.width,c.height); // Draw a rectangle with new settings
//===填充(表明)原点===
ctx.beginPath();
ctx.arc(x,y,,,true);
ctx.fill();
ctx.closePath();
var grd=ctx.createLinearGradient(x,y,,);
grd.addColorStop(,"#FF");
grd.addColorStop(.,"#FF");
grd.addColorStop(,"#FF");
ctx.fillStyle=grd;
ctx.font = "pt Arial";
ctx.fillText("html",,);
ctx.save();
// 时间刻度
for(var i=;i<;i++)
{
var angle=(Math.PI*)/;
ctx.beginPath();
var b=i==||i==||i==||i==
if(i%==){
if(b){
ctx.fillStyle="red";
radius=;
}
else{
ctx.fillStyle="blue";
radius=.;
}
ctx.font="px Arial";
ctx.fillText(i/==?:i/,x-,y-); //x大-右 小-左 y大小 数字刻度
}
else
{
ctx.fillStyle="#";
radius=;
}
if(s==i)radius=radius+;
ctx.arc(x,y-,radius,,true);
ctx.fill();
transform(ctx,x,y,angle,true);
}
ctx.restore();
//==========================
sAngle=(Math.PI*)/*s; //秒度
ctx.save(); //时针
ctx.fillStyle="red";
// ctx.strokeStyle="red";
ctx.lineWidth=;
transform(ctx,x,y,(Math.PI*)/*h,true);
sj(ctx,x,y,x-,y-,x+,y-);
ctx.restore();
ctx.save();//分针转动
ctx.fillStyle="blue";
ctx.lineWidth=;
transform(ctx,x,y,(Math.PI*)/*m,true);
sj(ctx,x,y,x-,y-,x+,y-);
ctx.restore();
//秒针转动
ctx.save();
ctx.fillStyle="#";
transform(ctx,x,y,sAngle,true);
sj(ctx,x,y,x-,y-,x+,y-);
ctx.restore();
//数据整理
if(s%==){
sAngle=,s=,m++;
if(m==){ //每十二分 时针旋转一次
if(m!=)h++;
if(m%==)m=;
}
if(h%==)h=;
};
//*注:如果是放到外面 判断分针或时针转动 则满足条件时 都重复会运行 原因 每执行一遍 只有秒针 在时刻变动 *//
var dateString=time.getFullYear()+"年"+(time.getMonth()+)+"月"+time.getDate()+"日 "+weekday[time.getDay()]+" h:"+time.getHours()+" m:"+m+" s:"+s;
document.getElementById("d").innerHTML=dateString;
}
//指针三角!
function sj(ctx,x,y,x,y,x,y){
//====例====
// ctx.beginPath();
// ctx.moveTo(x,y);
// ctx.lineTo(x,y-);
// ctx.stroke();
// ctx.beginPath();
//
// ctx.moveTo(x-,y-);
// ctx.lineTo(x+,y-);
// ctx.lineTo(x,y--);
// ctx.fill();
ctx.beginPath();
ctx.moveTo(x,y);
ctx.lineTo(x,y);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(x,y);
ctx.lineTo(x,y);
ctx.lineTo(x,y);
ctx.fill();
}
//据坐标旋转
function transform(ctx,x,y,angle,b){
if(b){// 顺时针
ctx.transform(Math.cos(angle), Math.sin(angle),
-Math.sin(angle), Math.cos(angle),
x*(-Math.cos(angle)) + x*Math.sin(angle),
y*(-Math.cos(angle)) - y*Math.sin(angle))
}
}
//=====每秒执行============(执行事件自选)
window.setInterval(function(){draw()},);
// window.onload=function(){ //效果同上
// setInterval("draw()",);
// };
// ]]>
</script>
HTML / CSS 相关文章推荐
详解Sticky Footer 绝对底部的两种套路
Nov 03 HTML / CSS
CSS3实现图片抽屉式效果的示例代码
Nov 06 HTML / CSS
详解CSS3弹性伸缩盒
Sep 21 HTML / CSS
HTML5 CSS3新的WEB标准和浏览器支持
Jul 16 HTML / CSS
HTML5中判断用户是否正在浏览页面的方法
May 03 HTML / CSS
字中字效果的实现【html5实例】
May 03 HTML / CSS
基于HTML5的WebGL经典3D虚拟机房漫游动画
Nov 15 HTML / CSS
HTML5离线应用与客户端存储的实现
May 03 HTML / CSS
canvas环形倒计时组件的示例代码
Jun 14 HTML / CSS
使用canvas实现黑客帝国数字雨效果
Jan 02 HTML / CSS
如何使用canvas绘制可移动网格的示例代码
Dec 14 HTML / CSS
html,css,javascript是怎样变成页面的
May 07 HTML / CSS
HTML5几个设计和修改的页面范例分享
Sep 29 #HTML / CSS
简单的HTML5初步入门教程
Sep 29 #HTML / CSS
基于html5 DeviceOrientation 实现微信摇一摇功能
Sep 25 #HTML / CSS
简单介绍HTML5中audio标签的使用
Sep 24 #HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
Sep 21 #HTML / CSS
深入解析HTML5的IndexedDB索引数据库
Sep 14 #HTML / CSS
使用HTML5的表单验证的简单示例
Sep 09 #HTML / CSS
You might like
生成静态页面的PHP类
2006/11/25 PHP
pw的一个放后门的方法分析
2007/10/08 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
详解vee-validate的使用个人小结
2017/06/07 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
介绍Python的Django框架中的QuerySets
2015/04/20 Python
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
python3.6实现学生信息管理系统
2019/02/21 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
python开根号实例讲解
2020/08/30 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
2014年五一活动策划方案
2014/03/15 职场文书
员工安全承诺书
2014/05/22 职场文书
MySql新手入门的基本操作汇总
2021/05/13 MySQL
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python