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画钟表盘/指针实时跳动的更多相关文章

  1. HTML5画:线、圆、矩形、渐变

    示例一:矩形 <!DOCTYPE html><head> <meta charset=utf-8> <title>HTML5画线.圆.矩形</ti ...

  2. [WPF] 使用 HandyControl 的 CirclePanel 画出表盘刻度

    1. 前言 最近需要一个 WPF 的表盘控件,之前 Cyril-hcj 写过一篇不错的博客 <WPF在圆上画出刻度线>,里面介绍了一些原理及详细实现的代码: double radius = ...

  3. 使用HTML5画饼图

    在进行数据的统计分析时, 饼图也是比较经常用到的一类统计图. 需求分析:   一个饼图一般包含以下几部分:   1.标题   2.扇形   3.份额(百分比)   4.标识器      设计:     ...

  4. 使用HTML5画柱状图

    柱状图在很多应用中都比较常见,例如投票结果的统计分析,企业销售数据的统计分析等等.    需求分析:  一个柱状图一般包含以下几部分:  1.标题  2.横坐标(含标题)  3.竖坐标 (含标题.刻度 ...

  5. html5画饼形图

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm10.aspx ...

  6. 一个给力的html5 画多边形的例子

    只需改变参数就能画出你想要的多边形,代码简单!不得不惊叹canvas的强大! 代码奉上 <!doctype html> <html> <head> <meta ...

  7. HTML5 画一张图

    笔者:本笃庆军 原文地址:http://blog.csdn.net/qingdujun/article/details/33344289 一.绘制图像 使用drawImage()方法绘制图像. 画图环 ...

  8. html5 画图板

    8个最新炫酷的HTML5动画应用 http://www.php100.com/html/it/qianduan/2015/0107/8281.html 另外一个画板demo http://www.os ...

  9. html5画四边形

    <canvas id='test02'></canvas> <script> var canvas = document.getElementById('test0 ...

随机推荐

  1. Java面试集合(二)

    前言 大家好,给大家带来Java面试集合(二)的概述,希望你们喜欢 二 1.请问线程有哪些状态? 新建状态(New) 就绪状态(Runnable) 运行状态(Running) 阻塞状态(Blocked ...

  2. 基于vue的颜色选择器vue-color-picker

    项目中有用到颜色选择器的童鞋们可以看过来了 关于color-picker的jquery的插件是有蛮多,不过vue组件没有吧,反正我没有找到, 虽然element-ui里面有这个,但是你愿意为了一个小功 ...

  3. [git] 基本原理

    1. 基本原理 工作目录:本地项目所在目录    暂存区: 被 git 所管理的文件 本地仓库:本地的版本仓库,一般的提交操作会将变更信息先提交到本地仓库的版本库中 远程仓库:远程的版本仓库,将变更信 ...

  4. javascript 小方块平移

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Dispatch Queue 之 dispatch_sync

  6. oracle中常用的对用户的操作

    创建用户:create user usr1 identified by pwd default tablespace ts1 temporary tablespace tmp; 删除用户:drop u ...

  7. Migrate from ASP.NET Core 2.0 to 2.1

    http://www.talkingdotnet.com/migrate-existing-aspnet-core-2-application-aspnet-core-2-1/ https://doc ...

  8. ​​ ​​我的Java秋招面经大合集(包含BAT头条网易等公司)

    ​ 微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经 ...

  9. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十四):权限控制(Shiro 注解)

    在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 当前,我们基于导航菜单的显示和操作按钮的禁用状态,实现了页面可见性和 ...

  10. Jenkins 批量删除历史构建

    在一次巡查 Jenkins 时,发现很多个项目的历史构建比较多,这些历史构建对于现在来说又没有什么用处,那么想把它删除,但是一个一个删除很累,毕竟总共加起来有上千个,历史构建,而且还不只是一个项目.那 ...