canvas实现时钟
最近在看新浪体育网球频道(http://sports.sina.com.cn/tennis/)的时候,看到了下面的劳力士广告的时钟是用canvas做的,于是也实现了一个简单的canvas时钟。直接上代码:
<!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<title>clock</title>
</head> <body>
<canvas id="clock" width="500" height="700"></canvas>
<script type="text/javascript" src="js/clock.js"></script>
</body> </html>
//时钟
function clock(canvas) {
this.canvas = canvas;
this.ctx = canvas.getContext('2d');
this.clear = function() {
var ctx = this.ctx;
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height)
} //初始化调用
this.init = function() {
//图片加载
var clockImage = new Image();
var that = this;
clockImage.src = './images/clock.png';
clockImage.onload = function() {
setInterval(function() {
that.drawClock(clockImage);
}, 1000)
}
}
//画时钟
this.drawClock = function(img) {
this.clear();
this.drawClockBg(img);
this.drawTime();
}
//画时钟背景
this.drawClockBg = function(img) {
var ctx = this.ctx;
ctx.drawImage(img, 0, 0, 500, 500);
ctx.save();
//转到原点
ctx.translate(500 / 2, 500 / 2);
//画数字
var clockRadius = 250;
ctx.font = '36px Arial';
ctx.fillStyle = '#000';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
for (var n = 1; n <= 12; n++) {
var theta = (n - 3) * (Math.PI * 2) / 12;
var x = clockRadius * 0.7 * Math.cos(theta);
var y = clockRadius * 0.7 * Math.sin(theta);
ctx.fillText(n, x, y);
}
ctx.restore();
} //画时间
this.drawTime = function() {
// 获取时间
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var temhours = hours > 12 ? hours - 12 : hours;
var hour = temhours + minutes / 60;
var minute = minutes + seconds / 60;
var ctx = this.ctx;
var clockRadius = 250; ctx.save();
ctx.fillStyle = '#000';
//重新转到时钟原点
ctx.translate(500 / 2, 500 / 2); //画时针
ctx.save();
//计算出线转动的角度
var theta = (hour - 3) * 2 * Math.PI / 12;
ctx.rotate(theta);
ctx.beginPath();
//通过画线划出时针
ctx.moveTo(-15, -5);
ctx.lineTo(-15, 5);
ctx.lineTo(clockRadius * 0.5, 1);
ctx.lineTo(clockRadius * 0.5, -1);
ctx.fill();
ctx.restore(); // 画分针
ctx.save();
var theta = (minute - 15) * 2 * Math.PI / 60;
ctx.rotate(theta);
ctx.beginPath();
ctx.moveTo(-15, -4);
ctx.lineTo(-15, 4);
ctx.lineTo(clockRadius * 0.8, 1);
ctx.lineTo(clockRadius * 0.8, -1);
ctx.fill();
ctx.restore(); // 画秒针
ctx.save();
var theta = (seconds - 15) * 2 * Math.PI / 60;
ctx.rotate(theta);
ctx.beginPath();
ctx.moveTo(-15, -3);
ctx.lineTo(-15, 3);
ctx.lineTo(clockRadius * 0.9, 1);
ctx.lineTo(clockRadius * 0.9, -1);
ctx.fillStyle = '#0f0';
ctx.fill();
ctx.restore(); ctx.restore();
//画当前时间
ctx.font = "60px impact";
ctx.fillStyle = '#960';
ctx.textAlign = 'center';
ctx.fillText((hours > 9 ? hours : '0' + hours) + ':' + (minutes > 9 ? minutes : '0' + minutes) + ':' + (seconds > 9 ? seconds : '0' + seconds), 250, 600);
}
} window.addEventListener('load', function() {
canvas = document.getElementById('clock');
new clock(canvas).init();
});
这里的实现还是比较简单的。利用Date对象,获取当前的时间,然后画出当前时间点的钟表状态,最后用setInternval,每秒钟清除画布,重新再画一下一个钟表。里面用到的canvasAPI就不细说了,感兴趣的可以去了解一下canvas的API,它提供了很多强大的功能。
canvas实现时钟的更多相关文章
- [JS,Canvas]日历时钟
[JS,Canvas]日历时钟 Html: <!doctype html> <html> <head> <meta charset="UTF-8&q ...
- 使用canvas绘制时钟
使用canvas绘制时钟 什么使canvas呢?HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.<canvas> 标签只是图 ...
- HTML5 之Canvas 绘制时钟 Demo
<!DOCTYPE html> <html> <head> <title>Canvas 之 时钟 Demo</title> <!--简 ...
- canvas画时钟
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- [ZZ+CH] Html5 canvas+js 时钟
总之新Blog入驻以后,又开始老习惯,到处折腾自定义的空间,放些东西. 想起以前大一的时候做过一个Javascript的时间显示器,现在想做一个时钟,当然现在老奸巨猾,会先去看一看有前辈写过没. 前辈 ...
- canvas粒子时钟
前面的话 本文将使用canvas实现粒子时钟效果 效果展示 点阵数字 digit.js是一个三维数组,包含的是0到9以及冒号(digit[10])的二维点阵.每个数字的点阵表示是7*10大小的二维数组 ...
- canvas画时钟,重拾乐趣!
canvas时钟--效果图 一.先来简单介绍画时钟需要的canvas知识 1.在HTML页面中添加canvas元素,必须定义canvas元素的id属性值以便接下来的调用. HTML代码: <ca ...
- HTML5 Canvas爱心时钟代码
这是一款数字时钟动画,数字又多个小爱心组成,又何问起整理,随着时间推进,每一秒钟新数字替换旧数字,旧数字离去使用天女散花动画,花是五颜六色的. 查看效果:http://hovertree.com/te ...
- 用canvas绘制时钟
用canvas做时钟其实很简单,下面是我做出的效果: 是不是还挺漂亮的? 下面上代码: html <div class="whole"> <canvas id=& ...
- Canvas绘制时钟
①首先在HTML的body标签中添加一个canvas标签,用于绘制时钟. <canvas id="myCanvas" width="600" height ...
随机推荐
- PAT 1002 写出这个数
https://pintia.cn/problem-sets/994805260223102976/problems/994805324509200384 读入一个自然数n,计算其各位数字之和,用汉语 ...
- 《微信小程序组件》收集
https://github.com/liuqian0413/wxappUI https://github.com/liujians/Wa-UI
- 简单FTP服务器搭建
1 配置IIS 打开控制面板-卸载程序-点击 打开或关闭windows功能-勾选 internet信息服务-确定 2 配置iis web站点 开始菜单-搜索iis并进入iis管理器(计算机-右键-管理 ...
- Jenkins之常用变量
BUILD_NUMBER 目前的编号,如“153” JOB_NAME 此构建项目的名称,如“foo”或“foo / bar”. JOB_BASE_NAME 此建立项目的名称将剥离文件夹路径,例如“ba ...
- 洛谷 P4294 [WC2008]游览计划
题目链接 不是很会呢,但似乎抄了题解后有点明白了 sol:状态DP显然,其实是要构建一棵最小生成树一样的东西,我自己的理解(可能不是很对哦希望多多指教)f[x][y][zt]就是到x,y这个点,状态为 ...
- POJ2492-A Bug's Life-并查集扩展应用
维护一个relation数组,保留着此元素和根元素之间的性别关系.之后就可以判断gay了. #include <cstdio> #include <algorithm> #in ...
- lightoj1038(数学期望dp)
题意:输入一个数N,N每次被它的任意一个因数所除 变成新的N 这样一直除下去 直到 N变为1 求变成1所期望的次数 解析: d[i] 代表从i除到1的期望步数:那么假设i一共有c个因子(包括1和本身) ...
- MT【7】伯努利不等式
评:伯努利不等式: 若$r\le0$或者$r\ge1$,$(1+x)^r\ge1+rx$, 若$0\le r\le1$,$(1+x)^r\le1+rx$
- BZOJ4008 : [HNOI2015]亚瑟王(期望dp)
题意 略(看了20min才看懂...) 题解 我一开始天真地一轮轮推期望,发现根本不好算... 唉~ 不会做就只能抄题解咯 看了一波DOFY大佬的解法qwq 发现有句神奇的话 记住,期望要倒着推... ...
- [poj3278]抓住那头牛
题目描述 Farmer John has been informed of the location of a fugitive cow and wants to catch her immediat ...