最近在学canvas,然后根据MDN上的例子做了个动画时钟(为什么要造个轮子,因为丑。。)

这是MDN上的例子,怎么说呢,比较复古吧。

首先,找一张时钟的图片,就是下面这张了。

——来自bigger than bigger的dribbble网站,图片来源(侵删)

然后就开始用canvas实现这个逼格满满的时钟吧。在html代码中插入canvas标签

在js文件中创建画布(假设我们使用的都是现代浏览器)。

function clock() {

var ctx = document.getElementById('canvas').getContext('2d');

}

先来绘制时钟表盘,我们看到这张图是带有光线阴影效果的,画成一样难度太高。于是就用颜色的渐变来让时钟看起来稍微立体一点。在canvas中用createLinearGradient来创建一个新的渐变,并用addColorStop上色,最后把颜色赋给strokeStyle。详见运用样式与颜色 by MDN

//绘制表盘底色

ctx.translate(200, 200); //将坐标原点移到画布中心

ctx.rotate(-Math.PI/2); //将坐标轴逆时针旋转90度,x轴正方向对准12点方向

var lingrad = ctx.createLinearGradient(150, 0, -150, 0);

lingrad.addColorStop(0, '#242f37');

lingrad.addColorStop(1, '#48585c');

ctx.fillStyle = lingrad;

ctx.beginPath();

ctx.arc(0, 0, 150, 0, Math.PI * 2, true);

ctx.fill();

比较关键的一点是画布的坐标轴x轴正方向是时钟3点钟方向,为了方便起见,我们把它逆时针旋转90度让它指向十二点钟方向。

绘制刻度要用到旋转rotate(变形 Transformations by MDN),小时刻度有12个,相邻两个刻度与圆心连线的角度就是Math.PI/6,这里用的是弧度表示,也就是30度。那么我们就用for循环来画出小时的刻度。

for (var i = 0; i < 12; i++) {

ctx.beginPath();

ctx.strokeStyle = '#fff';

ctx.lineWidth = 3;

ctx.rotate(Math.PI / 6);

ctx.moveTo(140, 0);

ctx.lineTo(120, 0);

ctx.stroke();

}

同理,分钟的刻度也一样。

ctx.beginPath();

for (i = 0; i < 60; i++) {

if (i % 5 !== 0) { //去掉与小时刻度重叠的部分

ctx.beginPath();

ctx.strokeStyle = '#536b7a';

ctx.lineWidth = 2;

ctx.moveTo(140, 0);

ctx.lineTo(130, 0);

ctx.stroke();

}

ctx.rotate(Math.PI / 30);

}

表盘大致画好了,刻度也画好了,接下来就是绘制指针并让它指向正确的时间,是不是?不就就是画一条直线么。关键是指针rotate的角度是多少呢?其实也是比较简单的。先获取当前的时间,把小时转换为12小时制的。

var now = new Date(),

sec = now.getSeconds(),

min = now.getMinutes(),

hr = now.getHours();

hr = hr > 12 ? hr - 12 : hr;

那么,时针的位置就是(相对于x轴正方向转过的角度):

ctx.rotate(hr * (Math.PI / 6) + min * (Math.PI / 360) + sec * (Math.PI / 21600));

同理,分针和秒针的位置:

ctx.rotate(min * (Math.PI / 30) + sec * (Math.PI/1800)); //分针

ctx.rotate(sec * (Math.PI /30)); //秒针

最后,最关键的让指针转动起来,这里要用到的是requestAnimationFrame方法,用来重绘页面,得到连贯逐帧的动画,实现最佳的动画效果。

window.requestAnimationFrame(callback);

这个callback就是我们的绘制时钟的clock()函数。需要注意的是每次执行完requestAnimationFrame后需要清除画布,不然出现重叠交错的现象,我们把它放在clock函数开始的地方。

ctx.clearRect(0, 0, canvas.width, canvas.height);

到这里,动画时钟就OK了 效果图如下:

html5画布时钟cnsd,canvas动画时钟相关推荐

  1. canvas动画 时钟动画 太阳系动画 动态蚂蚁线 全景照片

    canvas给我们提供了绘图API,这些API基于JavaScript实现,那么我们可以方便的实现一些动画,在这里我们将展示几个经典的动画绘制技巧,包括:时钟,太阳系,动态蚂蚁线,全景照片 动画绘制的 ...

  2. HTML5系列代码:canvas动画--碰碰球

    animation 属性是一个简写属性,用于设置六个动画属性: animation-name animation-duration animation-timing-function animatio ...

  3. html5画布正五角星,canvas 正五角星如何画

    freeeWilll 给你一个正五角星的画法示例吧.如下:html> window.οnlοad=function() { var cvs=document.getElementById('ca ...

  4. 前端开发练习——包含了计时功能的动画时钟

    前言 学了一段时间的前端,三大核心知识总算是磕磕绊绊的学完了,于是花了一个多小时做出来了这么一个相当于总结复习一样的动画时钟. 这个动画时钟实现的功能: 固定在页面中央显示. 可以在普通时钟模式和计时 ...

  5. html5时间画布走动,javascript+HTML5 canvas绘制时钟功能示例

    本文实例讲述了javascript+HTML5 canvas绘制时钟功能.分享给大家供大家参考,具体如下: 效果如下: 代码: www.jb51.net canvas绘制时钟 div{text-ali ...

  6. HTML5 Canvas爱心时钟代码

    这是一款数字时钟动画,数字又多个小爱心组成,又何问起整理,随着时间推进,每一秒钟新数字替换旧数字,旧数字离去使用天女散花动画,花是五颜六色的. 查看效果: http://hovertree.com/t ...

  7. 表盘时针的html代码,html5画布操作的简单学习-简单时钟

    html5画布操作的简单学习-简单时针 效果图 一.什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. ...

  8. html5 画布绘制时钟

    用Html5实现时钟,包括转盘时钟和电子时钟,显示当前日期时间 绘制步骤: (1)先获取画布,设置画布的大小: (2)在js中获取画布对象,获取画布的画笔对象,设置画笔的一些属性: (3)获取系统当前 ...

  9. php绘制时钟刻度,html5 画布时钟效果

    网上看到个时钟效果,感觉挺好看,转了来,具体通过html5画布技术实现的,效果图如下: 具体 html 代码: html5 时钟效果 /** * Created by Administrator on ...

最新文章

  1. android四大组件五大存储六大布局,物联网研报:物联网进入规模化应用时代
  2. Linux学习之系统编程篇:利用 shm 进行进程间通信
  3. boost::iostreams模块实现具有64位大文件偏移量的测试程序
  4. property的修饰符
  5. 十分钟理解线性代数的本质_数学对于编程来说到底有多重要?来看看编程大佬眼里的线性代数!...
  6. java printf 版本_java – PrintStream类型中的printf(String,Object ...
  7. 服务器连接工具mat_将个人笔记本改造成Linux简易服务器
  8. linux不识别xfs,centos7 grub2无法识别xfs root分区
  9. Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net...
  10. linux下zip分卷z01解压,Linux下解压分包文件zip(zip/z01/z02)
  11. 用友U8审批流相关开发
  12. 推送给自学程序员们的一本Python书
  13. matlab相对强度噪声,噪声强度(噪声功率)、SNR、dBW
  14. 【Java】SpringBoot后端格式转换:把PPT转成PDF
  15. 支持向量机:Duality
  16. 美化 PowerShell
  17. IT从业者创业公司生存指南:创业初期 ---- 指点江山,激扬文字,粪土当年万户侯
  18. 凯云水利水电工程造价管理系统 技术解释(十三) 中间单价(四)
  19. 物理专业要用的计算机语言,16岁被保送清华,本科毕业进麻省理工读博,现开发Taichi爆红网络...
  20. Cesium 注册及移除事件

热门文章

  1. 联网对战游戏开源实例分享之《斗兽棋》
  2. Android应用性能优化: 应用卡顿、ANR
  3. 老毛桃U盘启动盘制作工具安装教程
  4. 三层架构之业务逻辑层(BLL)
  5. vue3-badge组件封装
  6. 良品铺子或签《爸3》萌娃,电视真人秀植入代言人成新玩法
  7. [软件评测第十二期]遨游浏览器
  8. Java设计的五子棋游戏
  9. 发动机转速和曲轴位置传感器作用、安装及类型
  10. 计算机无法弹出支付,笔记本Win7系统电脑网上银行支付页面打不开的解决方法...