Html5画钟表盘/指针实时跳动
1、最终效果
时钟、分钟、秒指针连续移动
2、完整代码
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Clock in canvas</title>
<script type="text/javascript" charset="utf-8" src="Scripts/Jquery/jquery-1.9.1.min.js"></script>
<script>
$(function () {
var container = $('.container');
var clockPanel = $('.clockPanel', container).get(0);
var ctx = clockPanel.getContext('2d'); var r = 100;
var point = { X: 150, Y: 150 };
drawCircle(ctx, point, r); var clockPointer = $('.clockPointer', container).get(0);
var ctxPointer = clockPointer.getContext('2d'); var run = function () {
drawPointer(ctxPointer, point, r, new Date());
requestAnimFrame(run);
}
run();
}) function drawCircle(ctx, point, r) {
ctx.beginPath();
ctx.arc(point.X, point.Y, r, 0, Math.PI * 2, true);
ctx.stroke(); ctx.beginPath();
ctx.arc(point.X, point.Y, 4, 0, Math.PI * 2, true);
ctx.fillStyle = "#ccc";
ctx.fill();
ctx.closePath();
for (var i = 0; i < 60; i++) {
drawScale(ctx, point, r, 5, i);
}
} function drawScale(ctx, point, r, len, scale) {
var angle = 360 * scale / 60 * 2 * Math.PI / 360 if (scale % 5 == 0) {
len = len + 3
ctx.lineWidth = 3;
}
else {
ctx.lineWidth = 1;
}
var sX = point.X - (r - len) * Math.sin(angle);
var sY = point.Y - (r - len) * Math.cos(angle);
var eX = point.X - r * Math.sin(angle);
var eY = point.Y - r * Math.cos(angle); ctx.beginPath();
ctx.strokeStyle = "#ccc";
ctx.moveTo(sX, sY);
ctx.lineTo(eX, eY);
ctx.stroke();
ctx.closePath();
} function drawPointer(ctx, point, r, time) {
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
var hours = time.getHours();
var minutes = time.getMinutes();
var seconds = time.getSeconds();
var minSec = time.getMilliseconds();
var angleS = 2 * Math.PI * (60 * 1000 - seconds * 1000 - minSec) / (60 * 1000);
var esX = point.X - (r - 5) * Math.sin(angleS);
var esY = point.Y - (r - 5) * Math.cos(angleS); var eSec = { X: esX, Y: esY };
drawLine(ctx, point, eSec, 1); var angleM = 2 * Math.PI * (60 * 60 - minutes * 60 - seconds) / (60 * 60);
var emX = point.X - (r - 10) * Math.sin(angleM);
var emY = point.Y - (r - 10) * Math.cos(angleM); var eMinu = { X: emX, Y: emY };
drawLine(ctx, point, eMinu, 2); var angleH = 2 * Math.PI * ((24 * 60 * 60 - hours * 60 * 60 - minutes * 60 - seconds) % (12 * 60 * 60)) / (12 * 60 * 60);
var ehX = point.X - (r - 15) * Math.sin(angleH);
var ehY = point.Y - (r - 15) * Math.cos(angleH); var eHour = { X: ehX, Y: ehY };
drawLine(ctx, point, eHour, 3);
} function drawLine(ctx, pointS, pointE, lineWidth) {
ctx.lineWidth = lineWidth;
ctx.beginPath();
ctx.strokeStyle = "#808080";
ctx.moveTo(pointS.X, pointS.Y);
ctx.lineTo(pointE.X, pointE.Y);
ctx.stroke();
ctx.closePath();
} window.requestAnimFrame = (function () {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function (run) {
window.setTimeout(run, 16);
};
})();
</script>
<style>
.container {
width: 300px;
height: 300px;
/*background: orange;*/
margin: 0 auto;
position: relative;
} canvas {
position: absolute;
}
</style>
</head>
<body>
<div class="container">
<canvas class="clockPanel" height="300" width="300"></canvas>
<canvas class="clockPointer" height="300" width="300"></canvas>
</div>
</body>
</html>
3、实现重点
window.requestAnimFrame = (function () {
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function (run) {
window.setTimeout(run, 16);
};
})();
Html5画钟表盘/指针实时跳动的更多相关文章
- HTML5画:线、圆、矩形、渐变
示例一:矩形 <!DOCTYPE html><head> <meta charset=utf-8> <title>HTML5画线.圆.矩形</ti ...
- [WPF] 使用 HandyControl 的 CirclePanel 画出表盘刻度
1. 前言 最近需要一个 WPF 的表盘控件,之前 Cyril-hcj 写过一篇不错的博客 <WPF在圆上画出刻度线>,里面介绍了一些原理及详细实现的代码: double radius = ...
- 使用HTML5画饼图
在进行数据的统计分析时, 饼图也是比较经常用到的一类统计图. 需求分析: 一个饼图一般包含以下几部分: 1.标题 2.扇形 3.份额(百分比) 4.标识器 设计: ...
- 使用HTML5画柱状图
柱状图在很多应用中都比较常见,例如投票结果的统计分析,企业销售数据的统计分析等等. 需求分析: 一个柱状图一般包含以下几部分: 1.标题 2.横坐标(含标题) 3.竖坐标 (含标题.刻度 ...
- html5画饼形图
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm10.aspx ...
- 一个给力的html5 画多边形的例子
只需改变参数就能画出你想要的多边形,代码简单!不得不惊叹canvas的强大! 代码奉上 <!doctype html> <html> <head> <meta ...
- HTML5 画一张图
笔者:本笃庆军 原文地址:http://blog.csdn.net/qingdujun/article/details/33344289 一.绘制图像 使用drawImage()方法绘制图像. 画图环 ...
- html5 画图板
8个最新炫酷的HTML5动画应用 http://www.php100.com/html/it/qianduan/2015/0107/8281.html 另外一个画板demo http://www.os ...
- html5画四边形
<canvas id='test02'></canvas> <script> var canvas = document.getElementById('test0 ...
随机推荐
- 教你用python打造WiFiddos
本文来源于i春秋学院,未经允许严禁转载. 0x00 前言因为在百度上很难找到有关于用python打造WiFidos的工具的,而且不希望大家成为一名脚本小子,所以我打算写一篇,需要的工具有scapy,i ...
- 9:集合collection
第一 集合框架的概述 集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储. 集合和数组的区别: 数组虽然可以存储对象,但是长度是固定的:集合长度 ...
- php开发中应该注意的错误开关与常见处理[开发篇]
我们可能一开始就接触一个项目的开发,刚开始时都是信心满满,一定把这个项目做得非常完美,但是时间那么少,任务那么多,我们就只有将就了. 首先,一般情况下,我们会加一个调试标志,define('APP_D ...
- Spring Boot 核心配置文件 bootstrap & application 详解。
用过 Spring Boot 的都知道在 Spring Boot 中有以下两种配置文件 bootstrap (.yml 或者 .properties) application (.yml 或者 .pr ...
- saltstack 初始化LINUX系统
前面我们已经了解了saltstack的基础功能,现在就可以使用saltstack为初始化新安装的linux系统. 初始化列表: 1.关闭selinux 3.修改sshd配置文件 4.内核优化 5.ul ...
- 《JavaScript高级教程》学习笔记一、变量和数据类型
JavaScript的核心语言特性在ECMA-262中是以名为ECMAScript的伪语言的形式来定义的. 一.变量和数据类型 1. 变量 JavaSript是弱类型语言,可以通过var定义任何类型变 ...
- ubuntu16.04 程序开机自启动设置及启动优化
使用过程中,为了方便使用,有一些程序需要开机时自启动应用,下面将介绍一下ubuntu16.04下程序的开机自启动设置方法. 1 建立一个可执行程序的运行脚本如 keepalive.sh.内部写入要执 ...
- Java并发编程笔记之ArrayBlockingQueue源码分析
JDK 中基于数组的阻塞队列 ArrayBlockingQueue 原理剖析,ArrayBlockingQueue 内部如何基于一把独占锁以及对应的两个条件变量实现出入队操作的线程安全? 首先我们先大 ...
- 关于QT中.pro文件中的相对路径
被.pro文件中的相对路径给整糊涂了,仔细研究后,原来.pro文件中有两种相对路径. 一种情况下./表示.pro文件所在的目录 另一种情况下./表示构建生成目录 INCLUDEPATH SOURCE ...
- 年终培训关于磁盘冗余阵列、热备、群集、负载均衡、云计算、F5、Nginx等的概念和基本原理
在系统部署实施过程中,客户往往会关注系统的可用性方面的指标. 对于一个具备高可用性的系统来说, 多机部署方案是必不可少的. 我们这个知识分享,就从多个不同层面来介绍多机部署方案. ---------- ...
