用canvas模拟钟表

很久没有更新博客了,最近忙实习准备面试,快要心力交瘁-_-。空闲下来后,用HTML5的canvas模拟的简易钟表,贴上代码。

效果如下:

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>canvas模拟钟表</title>
<style>
    body { background-color:yellow;}
    #c1 { background-color: white;}
</style>
<script>
    window.onload = function() {
            var oC = document.getElementById(‘c1‘);
            var oCG = oC.getContext(‘2d‘);
            function toDraw() {
                    oCG.clearRect(0,0,oC.width,oC.hight); //如果不清空画布每执行一次toDate()就会画一次时钟,导致每秒都有一次时钟重合
                    var x = 200;
                    var y = 200;
                    var r = 150;

                    var oDate = new Date();
                    var oHours = oDate.getHours();
                    var oMin = oDate.getMinutes();
                    var oSec = oDate.getSeconds();

                    //分别获取三针在当前时间点的弧度,从12点开始计算,因此需要减去90度(arc函数从三点处开始计算为0度)
                    // 度数转化为弧公式:度数*Math.PI/180
                    var oHoursValue = (-90+30*oHours+oMin/2)*Math.PI/180;// oMin/2指分针走一圈60分钟,时针只走15度
                    var oMinValue = (-90+6*oMin)*Math.PI/180;
                    var oSecValue = (-90+6*oSec)*Math.PI/180;

                    //绘制表盘分针刻度
                    oCG.beginPath();
                    for(var i=0;i<60;i++) {
                    oCG.moveTo(x,y);
                    oCG.arc(x,y,r,6*i*Math.PI/180,6*(i+1)*Math.PI/180,false); }
                    oCG.closePath();
                    oCG.stroke();

                    //由于分针刻度是从中心点开始沿半径指向表盘弧,所以绘制一个半径稍小于r,填充背景为白色的表盘遮盖多余的刻度
                    oCG.fillStyle=‘white‘;
                    oCG.beginPath();
                    oCG.moveTo(x,y);
                    oCG.arc(x,y,r*19/20,0,360*Math.PI/180,false);
                    oCG.closePath();
                    oCG.fill();

                    //绘制时针刻度
                    oCG.lineWidth=‘3‘;
                    oCG.beginPath();
                    for(var i=0;i<12;i++) {
                    oCG.moveTo(x,y);
                    oCG.arc(x,y,r,30*i*Math.PI/180,30*(i+1)*Math.PI/180,false); }
                    oCG.closePath();
                    oCG.stroke();

                    //同上,绘制填充背景为白色的小盘遮盖多余刻度
                    oCG.fillStyle=‘white‘;
                    oCG.beginPath();
                    oCG.moveTo(x,y);
                    oCG.arc(x,y,r*18/20,0,360*Math.PI/180,false);
                    oCG.closePath();
                    oCG.fill();

                    //绘制时针指针
                    oCG.lineWidth = ‘5‘;
                    oCG.beginPath();
                    oCG.moveTo(x,y);
                    oCG.arc(x,y,r*10/20,oHoursValue,oHoursValue,false);
                    oCG.closePath();
                    oCG.stroke();

                    //绘制分针指针
                    oCG.lineWidth = ‘3‘;
                    oCG.beginPath();
                    oCG.moveTo(x,y);
                    oCG.arc(x,y,r*14/20,oMinValue,oMinValue,false);
                    oCG.closePath();
                    oCG.stroke();

                    //绘制秒针指针
                    oCG.lineWidth = ‘1‘;
                    oCG.beginPath();
                    oCG.moveTo(x,y);
                    oCG.arc(x,y,r*19/20,oSecValue,oSecValue,false);
                    oCG.closePath();
                    oCG.stroke();

                    //绘制时钟中心的黑点
                    oCG.fillStyle=‘black‘;
                    oCG.beginPath();
                    oCG.moveTo(x,y);
                    oCG.arc(x,y,r*1/30,0,360*Math.PI/180,false);
                    oCG.closePath();
                    oCG.fill();
                }
                setInterval(toDraw,1000);
            toDraw();
        };
</script>
</head>

<body>
    <canvas id="c1" width="400px" height="400px"> <!--宽高写在html里,写在css里有问题-->
        <span>该浏览器不支持canvas内容</span> <!--对于不支持canvas的浏览器显示-->
    </canvas>
</body>
</html>
时间: 2024-10-25 23:02:17

用canvas模拟钟表的相关文章

经典!HTML5 Canvas 模拟可撕裂布料效果

这是一个模拟可撕裂布料效果的 HTML5 Canvas 应用演示,效果逼真.你会看到,借助 Canvas 的强大绘图和动画功能,只需很少的代码就能实现让您屏息凝神的效果. 温馨提示:为保证最佳的效果,请在 IE10+.Chrome.Firefox 和 Safari 等现代浏览器中浏览. 源码下载     效果演示 您可能感兴趣的相关文章 Web 开发中很实用的10个效果[源码下载] 精心挑选的优秀jQuery Ajax分页插件和教程 12个让人惊叹的的创意的 404 错误页面设计 让网站动起来!

结合 CSS3 &amp; Canvas 模拟人行走的效果

HTML5 和 CSS3 技术给 Web 带来了新的利器,点燃了 Web 开发人员的激情.所谓只有想不到,没有做不到,的确如此.下面给大家分享一个结合 CSS3 & Canvas 模拟人行走的动画效果. 温馨提示:为保证最佳的效果,请在 IE10+.Chrome.Firefox 和 Safari 等现代浏览器中浏览. 插件下载     效果演示 您可能感兴趣的相关文章 Web 开发中很实用的10个效果[源码下载] 精心挑选的优秀jQuery Ajax分页插件和教程 12个让人惊叹的的创意的 40

canvas模拟中国铁路运行图

原理说明 1.在知道canvas画布尺寸的情况下,需要将地理经纬度信息转换为canvas画布x,y坐标,因为中国地图地理经纬度坐标取值范围为73.33-135.05(经度)37-50(维度),所以第一步需要确认的就是画布的中心位置,这里命名为centerX和centerY,同样的确认中国地图经纬度对应的中心位置,这里命名为positionX,positionY. 2.人为定义一个放大值range,这个值主要作用就是等比例的将中国地图在canvas画布中放大,range的数值需要根据画布横向尺寸跨

HTML5 Canvas 画钟表

画钟表是2D画图的老生常谈,我也不能免俗弄了一个.代码如下: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <head> <title>钟表</title> </head> <body onloa

canvas 模拟小球上抛运动的物理效果

最近一直想用学的canvas做一个漂亮的小应用,但是,发现事情并不是想的那么简单.比如,游戏的逼真效果,需要自己来coding…… 所以,自己又先做了一个小demo,算是体验一下亲手打造物理引擎的感觉吧.*_* 代码效果预览地址:http://code.w3ctech.com/detail/2524 html: 1 <div class="container"> 2 <canvas id="canvas" style="border:1p

模拟钟表的转动

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>练习</title> </head> <style type="text/css"> * { margin: 0; padding: 0; } @keyframes minute { from { transfor

canvas模拟重力效果

总结 速度和加速度是动画的基础元素,其中两者都是向量,包括了一个重要因素:方向. 要学会应用 分解 和 合成 ,将速度或加速度分解到x.y轴上,然后将每条轴上的加速度或速度相加,然后再分别与物体的位置坐标相加. 附录: 总要公式: (1)将角速度分解为x.y轴上的速度向量 vx = speed * Math.cos(angle) vy = spedd * Math.sin(angle) (2)将角加速度分解为x.y轴上的加速度 ax = force * Math.cos(angle) ay =

canvas实现钟表

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <style> 7 #clock{ 8 background: aqua; 9 } 10 </style> 11 </head> 12 <body> 13 &

canvas 画钟表

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> body { background: #000; } #c1 { background: #fff; margin: 0 auto; position: absolute; left: 50%; mar