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);
            };
        })();
 
时间: 2024-10-04 16:41:02

Html5画钟表盘/指针实时跳动的相关文章

HTML5 画一张图

笔者:本笃庆军 原文地址:http://blog.csdn.net/qingdujun/article/details/33344289 一.绘制图像 使用drawImage()方法绘制图像. 画图环境提供了该方法的三个不同版本号. drawImage(image,x,y) : 在canvas中(x,y)处绘制图片. drawImage(image,x,y,width,height) : 在canvas中(x,y)处绘制图片.并将其缩放到指定的宽度和高度. drawImage(image,sou

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

只需改变参数就能画出你想要的多边形,代码简单!不得不惊叹canvas的强大! 代码奉上 <!doctype html> <html> <head> <meta charset="gb2312"> <title>画图</title> </head> <body> <canvas id = "myCanvas" width = '500' height = '500'&

html5 画图板

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

利用jquery,html5实现图片预览实时上传

          html代码 <div class="form-group"> <label for="pic" class="col-md-1 control-label">小图:</label> <div class="col-md-4"> <input type="file" class="form-control" nam

html5画四边形

<canvas id='test02'></canvas> <script> var canvas = document.getElementById('test02'); var context = canvas.getContext('2d'); context.moveTo(50, 0); context.lineTo(0, 50); context.lineTo(50, 100); context.lineTo(100, 50); context.lineTo(

HTML5适合移动应用开发的几大特性

1.离线缓存为HTML5开发移动应用提供了基础 HTML5 Web Storage API可以看做是加强版的cookie,不受数据大小限制,有更好的弹性以及架构,可以将数据写入到本机的ROM中,还可以在关闭浏览器后再次打开时恢复数据,以减少网络流量. 同时,这个功能算得上是另一个方向的后台“操作记录”,而不占用任何后台资源,减轻设备硬件压力,增加运行流畅性. 在线app支持边使用边下载离线缓存,或者不下载离线缓存:而离线app必须是下载完离线缓存才能使用. 形象点说,cookie就是存了电话和菜

(转) 浅析HTML5在移动应用开发中的使用

(转)浅析HTML5在移动应用开发中的使用 (原)http://www.iteye.com/magazines/67 2012-03-07  来自 UECD.163.com  编辑 wangguo 有38498人浏览 收藏 html5 移动开发 app UI < > 猎头职位: 上海: Junior Product Manager 前言 HTML5的出现让移动平台的竞争由系统平台转向了浏览器之间:移动端的IE.Chrome.FireFox.Safari,亦或是新出现的浏览器,谁能达到在移动端对

WEB前端开发学习----9. 使用canvas来画个时钟

canvas元素在html5中的重要性非同一般.配合JS让我们实现了在浏览器页面中作画的强大功能.不再单单依靠图片,flash等外部文件,减少http请求,从而网页加载速度更加快捷. 简单的线段: 看个小演示  canvas小房子 不用函数累死人.... 旋转: 使用提供的rotate()方法.需要注意的是,在旋转前,应该重新定位原点.一般来说将要旋转的图像的端点重定向为原点,以此为基础来旋转.也就是说先定位,再设置旋转角度,最后画图.看个演示  canvas 扇子.这样要比一道一道的画线方便许

用canvas画“哆啦A梦”时钟

前言:今天看完了Js书的canvas画布那张,好开心~又是心爱的canvas~欧耶~ 之前看到有人建议我画蓝胖子,对哦,我怎么把童年最喜欢的蓝胖子忘了,为了表达我对蓝胖子的歉意,所以今天画了会动的hello world,也算是一种进步咯~ 好的各位,请上车的乘客往里走,请不要堵塞通道,谢谢.我们开车吧~ 正文: 今天先上图吧,看看效果再说 今天的蓝胖子长这样,看到它还是这么胖,我就放心了.这世界还是充满正能量的,总归还有人比我胖,哈哈哈 然后是上代码 html部分 <canvas id="