今天,带来的是使用HTML5中Canvas标签实现的动态时钟效果。

  话不多说,先看效果:亲,请点击这里

  众所周知,Canvas标签是HTML5中的灵魂,HTML5 Canvas是屏幕上的一个由JavaScript控制的即时模式位图区域。即时模式是指在画布上呈现像素的方式,

  HTML5 Canvas通过JavaScript调用CanvasAPI,在每一帧完全重绘屏幕上的位图。详细将在下面代码进行说明。

  HTML结构代码:

     <canvas id="canvas" width="500" height="500">
您的浏览器不支持Canavas标签,请升级浏览器再查看此页面!
</canvas>

  CSS样式代码:

     <style type="text/css">
*{margin:0px;padding:0px;}
.canvasbox{margin:50px auto;background:#dadada;width:500px;}
</style>

  JS脚本代码:

 <script type="text/javascript">
var canvas = document.getElementById("canvas");
//获取Canvas的2d上下文对象
var context = canvas.getContext("2d"); //定义一个初始化函数
function init(){
//先清除画布上的所有图像
context.clearRect(0,0,500,500); //获取系统时间
var date = new Date();
var hours = date.getHours();
//因为钟表是12小时制,所以必须对时刻度进行控制
hours = hours > 12 ? hours-12 : hours;
var minutes = date.getMinutes();
var seconds = date.getSeconds(); //开始画表盘
context.beginPath();
//在画布中心250,250点上画一个圆
context.arc(250,250,200,0,360,false);
//定义画笔的宽度
context.lineWidth = 10;
//定义画笔颜色
context.strokeStyle = "#000";
//关闭绘画路径
context.closePath();
//上色
context.stroke(); //开始画刻度
//时刻度
for(var h = 0;h < 12;h++){
//先将图像进行保存
context.save();
context.lineWidth = 8;
context.strokeStyle = "#f00";
//定义旋转中心点
context.translate(250,250);
//定义旋转角度
context.rotate(h*30*Math.PI/180);
context.beginPath();
context.moveTo(0,190);
context.lineTo(0,170);
context.closePath();
context.stroke();
//将之前的保存的图像显示,形成新的图像
context.restore();
}
//分刻度
for(var m = 0;m < 60;m++){
context.save();
context.lineWidth = 4;
context.strokeStyle = "red";
context.translate(250, 250);
context.rotate(m*6*Math.PI/180);
context.beginPath();
context.moveTo(0, 190);
context.lineTo(0, 180);
context.closePath();
context.stroke();
context.restore();
} //画时针
context.save();
context.lineWidth = 8;
context.strokeStyle = "#000";
context.translate(250,250);
context.rotate(hours*30*Math.PI/180);
context.beginPath();
context.moveTo(0,10);
context.lineTo(0,-100);
context.closePath();
context.stroke();
context.restore(); //画分针
context.save();
context.lineWidth = 4;
context.strokeStyle = "#000";
context.translate(250,250);
context.rotate(minutes*6*Math.PI/180);
context.beginPath();
context.moveTo(0,10);
context.lineTo(0,-140);
context.closePath();
context.stroke();
context.restore(); //画秒针
context.save();
context.lineWidth = 2;
context.strokeStyle = "blue";
context.translate(250,250);
context.rotate(seconds*6*Math.PI/180);
context.beginPath();
context.moveTo(0,10);
context.lineTo(0,-170);
context.closePath();
context.stroke();
context.restore();
}
//调用定时器,在每秒刷新重绘新图像
setInterval(init,1000);
</script>

  其中,蕴含着一个小BUG。在绘画时刻度和分刻度时,若颜色不一时,会出现重叠现象,因为在绘画时刻度后,再进行绘画分刻度,故小编将两刻度颜色设置为一致,避免该现象产生。当然,也可以通过判断去进行处理,小编就不在此进行处理。

  在浏览该效果时,请使用支持HTML5的浏览器,以免影响浏览效果。

  享受代码,享受生活,网页效果,每日一更。

HTML5之Canvas时钟(网页效果--每日一更)的更多相关文章

  1. CSS3之图片3D翻转效果(网页效果--每日一更)

    今天,带来的是纯CSS3的效果--图片3D翻转. 请看效果:亲,请点击这里 这个效果主要还是运用了CSS3的transform变形属性,与上个效果不同的是,这次并不是动画,所以没有采用animatio ...

  2. CSS3之绽放的花朵(网页效果--每日一更)

    今天,带来的是纯CSS3打造的效果--绽放的花朵. 先来看效果吧:亲,请点击这里 这是纯CSS3样式打造的效果,关键是采用了animation属性和transform属性.详细请看下面代码. HTML ...

  3. JQuery图片轮播滚动效果(网页效果--每日一更)

    今天,带来的是一个图片的轮播滚动效果! 先来看一下效果展示:亲,请点击这里 原理很简单,设置一个定时器,使图片列表在每隔一段时间后滚动一次.而循环效果,就是在每一滚动的时候,将第一张图片放到最后一张的 ...

  4. 【HTML5】Canvas 实现放大镜效果

    图片放大镜 效果 在线演示    源码 原理 首先选择图片的一块区域,然后将这块区域放大,然后再绘制到原先的图片上,保证两块区域的中心点一致, 如下图所示: 初始化 <canvas id=&qu ...

  5. 用户从手机的浏览器访问www.baidu.com,看到的可能跟桌面PC电脑,是不太一样的网页效果,会更适合移动设备使用。请简要分析一下,实现这种网页区分显示的原因及技术原理。

    手机的网速问题.屏幕大小.内存.CPU等.通过不同设备的特征,实现不同的网页展现或输出效果.根据useragent.屏幕大小信息.IP.网速.css media Query等原理,实现前端或后端的特征 ...

  6. HTML5在canvas中绘制复杂形状附效果截图

    HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路 ...

  7. 基于HTML5 Canvas的网页画板实现教程

    HTML5的功能非常强大,尤其是Canvas的应用更加广泛,Canvas画布上面不仅可以绘制任意的图形,而且可以实现多种多样的动画,甚至是一些交互式的应用,比如网页网版.这次我们要来看的就是一款基于H ...

  8. 那些不错的 [ Html5 + CSS3 + Canvas ] 效果!

    apng制作工具:http://isparta.github.io/how.html apng制作文章:http://isux.tencent.com/introduction-of-apng.htm ...

  9. HTML5应用之时钟

    利用HTML5的Canvas API可以完成我们以前意想不到的动画效果,以前我们想在网页上放置一个时钟,需要先用flash工具制作一个钟表,并写上复杂的JavaScript代码,然后载入到页面中.而H ...

随机推荐

  1. EF MYSQL 不能选择实体框架版本

    web.config文件里面加如下配置,然后编译 <provider invariantName="MySql.Data.MySqlClient" type="My ...

  2. flask-admin章节三:数据库迁移工具 alembic初步使用

    1. 概述 基于flask框架构建web,一般会使用sqlchemy(在flask中使用sqlchemy可以参考这里)作为数据库引擎. 这样业务的逻辑就可以做到不跟具体的数据库类型相耦合,具体后端业务 ...

  3. Ceph剖析:故障检测

    作者:吴香伟 发表于 2014/10/10 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 心跳是用于OSD节点间检测对方是否故障的,以便及时发现故障节点进入相应 ...

  4. MMS搜索功能修改

    高通平台的MMS源码中提供了搜索功能,但要先选择分类(名字,号码,信息内容,彩信主题),再输入字符,根据分类进行搜索. 而在Contacts中却不需要分类,直接根据输入字符搜索任意匹配字段.相比之下, ...

  5. RGB颜色中的参数是变量的时候,为什么要加上两个+号在左右?

    <script> function draw(){ var c=document.getElementById("mycanvas"); var cxt=c.getCo ...

  6. Number()数据类型转换

    Number() 如果是 Boolean 值, 和.如果是数字值,只是简单的传入和返回.如果是 .如果是 undefined,返回NaN. 如果是字符串,遵循下列规则:    如果字符串中只包含数字( ...

  7. 【CMD】日常总结

    命令脚本可以提升工作效率,之前用过也写过一些脚本,但时间一长就忘记了.写篇随笔记录一下,随用随记哈. 调用程序 //切换到某个路径下 cd D:\Glodon\GDW\GDW\Release\Bin ...

  8. 用SYS_CONNECT_BY_PATH进行层级查询时的排序问题

    用SYS_CONNECT_BY_PATH进行层级查询时, 对同一级别的节点进行排序,可以加order SIBLINGS by 子句实现 WITH N2 AS( SELECT n.ID, org.&qu ...

  9. HTTP 302 404 500 状态消息

    1xx:信息 100 Continue 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求. 101 Switching Protocols 服务器转换协议:服务器将 ...

  10. step by step 之餐饮管理系统七(点菜模块实现)

    好长时间没有更新这个系列了,一是因为这段时间比较忙,有很多事情,二来要学习新的东西,AngularJs,devExpress这两上框架,都是比较有名的框架,先上图: 上面就是用来点菜的界面,左边是已点 ...