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 ...
随机推荐
- Android 开发工具推荐
简评: 自己过去在 Android 开发中发现的好工具,在这里分享给大家.: ) Library methods count 每一个 Android App 的开发中都会用到很多的库,这个工具能够让你 ...
- 机器学习技法笔记:10 Random Forest
Roadmap Random Forest Algorithm Out-Of-Bag Estimate Feature Selection Random Forest in Action Summar ...
- PHP使用Zend Opcache之优化加速和缓存清理总结
简介 字节码缓存不是php的新特性,有很多独立性的扩展可以实现缓存,比如PHP Cache(APC),eAccelerator,ionCube和XCache等等.但是到目前为止,这些独立的扩展并没有集 ...
- 如何开始DDD
在开始DDD之前,你需要了解DDD的一些基础知识,聚合(AggregateRoot).实体(Entity).值对象(ValueObject),工厂(Factory),仓储(Repository)和领域 ...
- tf.transpose()的用法
一.tensorflow官方文档内容 transpose( a, perm=None, name='transpose' ) Defined in tensorflow/python/ops/arra ...
- 一款Timer倒计时器
http://files.cnblogs.com/Alandre/Time.zip自己做的哦 欢迎关注
- 我们自研的那些Devops工具
随着云技术以及容器技术的崛起,人肉运维的时代结束了 2018年为了解决日常运维中的痛点以及更高效的推进运维工作,我们自研并完善了几个工具系统,这些系统无一例外的帮我们节约了时间,提高了效率,这篇文章将 ...
- [深度学习]理解RNN, GRU, LSTM 网络
Recurrent Neural Networks(RNN) 人类并不是每时每刻都从一片空白的大脑开始他们的思考.在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义 ...
- java高级工程师开放面试题集<二>
临近年关,不少人蠢蠢欲动,有童鞋问我java后端面试会面试什么? 作为一个java后端老鸟,跌打滚爬多次被面试和面试别人,总结了一些经验,希望对大家有所帮助. 特别说明,仅仅针对工作两年以上的java ...
- jenkins+Android+gradle持续集成
本文Android自动化打包采用jenkins+gradle+upload to pyger的方式来实现,job执行完后只需要打开链接扫描二维码即可下载apk. 一.环境准备 1.下载Android ...
