`
mooring
  • 浏览: 96045 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HTML5 Canvas 动画时钟

阅读更多

原理:
  1.canvas通过clip()指定对应的区域为可用区域,在区域外的部分不受影响,每次刷新可见区域

  2.通过createPattern指定背景图片,通过fillStyle = pat应用填充结果

  3.save, restore恢复原来的状态

  4.指针通过角度变换得到对应的坐标,lineTo即可

  5.toDataURL保存对应的canvas的png的base64值

效果:

 


 

代码:

 

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>clock test</title>
    <style type="text/css">
        canvas{border:1px solid #111;}
    </style>
</head>
<body>
    <canvas width="400" height="300" id="canvasContainer">Your Browser does not support Canvas</canvas>
    <img id="myimg" src="images/01.png" width="1" height="1" />
    <select id="bg" onchange="changePic(this.value)">//背景图片选择
        <option value="01">01.png</option>
        <option value="02">02.png</option>
        <option value="04">04.png</option>
        <option value="08">08.png</option>
        <option value="09">09.png</option>
        <option value="11">11.png</option>
        <option value="12">12.png</option>
        <option value="14">14.png</option>
    </select>
    <button onclick="savePic()">SavePic</button>
<script type="text/javascript">
    window.onload = init;
    function init(){ //数据初始化
        $canvas = document.getElementById('canvasContainer');
        ctx = $canvas.getContext("2d");
        drawSomething();
        window.setInterval(drawCircle,200);
    }
    function savePic(){//图片保存方法
        var img = new Image();
        img.src = $canvas.toDataURL();//这句是重点
        document.body.appendChild(img);
    }
    function changePic(pic){
        pic = "images/"+pic+".png";
        var img = document.getElementById("myimg");
        img.onload = function(){
            ctx.drawImage(img,0,0,128,128,150,0,200,200);//右侧背景图片显示,以区别时钟区域的刷新
        }
        img.src = pic;
    }
    function drawCircle(){ //时钟绘制
        var x = 64, y=64;
        var img = document.getElementById("myimg");
        var pat = ctx.createPattern(img,"no-repeat");//时钟背景填充初始化
        var sL = 50,mL=40,hL=30,dt=new Date();//角度计算
        var sang = -Math.PI*(dt.getSeconds()*6)/180+Math.PI;
        var mang = -Math.PI*(dt.getMinutes()*6)/180+Math.PI; 
        var hang = -Math.PI*(dt.getHours()*30)/180+Math.PI-dt.getMinutes()/360*Math.PI*0.5;
        ctx.save();
        ctx.strokeStle = "#fff"; ctx.arc(x,y,64,0,Math.PI*2); ctx.clip();//可见区域定制
        ctx.clearRect(0,0,400,300);//全画布清空,只有可见区域被清空,
        ctx.fillStyle = pat; ctx.fill();//时钟背景应用
        ctx.beginPath();//时钟指针绘制
        ctx.strokeStyle = "#e33";ctx.fillStyle="#e33";ctx.lineWidth = 1;
        ctx.moveTo(x,y);
        ctx.lineTo(x+sL*Math.sin(sang),y+sL*Math.cos(sang));
        ctx.arc(x+sL*Math.sin(sang),y+sL*Math.cos(sang),2,0,Math.PI*2); ctx.fill();
        ctx.closePath(); ctx.stroke(); ctx.beginPath();
        ctx.strokeStyle = "#2f2"; ctx.lineWidth = 2;
        ctx.moveTo(x,y);
        ctx.lineTo(x+mL*Math.sin(mang),y+mL*Math.cos(mang));
        ctx.closePath(); ctx.stroke(); ctx.beginPath();
        ctx.strokeStyle = "#11e"; ctx.lineWidth = 3;
        ctx.moveTo(x,y);
        ctx.lineTo(x+hL*Math.sin(hang),y+hL*Math.cos(hang));
        ctx.closePath(); ctx.stroke(); 
        ctx.fillStyle = "#e33";
        ctx.arc(x,y,5,0,Math.PI*2);
        ctx.fill();
        ctx.restore();
    }
    function drawSomething(){//显示年月日,与右侧时钟背景作用类似,以区别这里不被重绘
        ctx.fillStyle = "#eee";
        ctx.fillRect(0,0,640,480);
        ctx.fillStyle = "#333";
        ctx.fillRect(0,128,128,20);
        ctx.fillStyle = "#fff";
        ctx.font = "14px Arial";
        ctx.textAlign = "center";
        ctx.textBaseline = "top";
        var dt = new Date();
        var dy = dt.getFullYear(),dm=dt.getMonth()+1,dd=dt.getDate();
        var str = dy + "年" + dm+"月" + dd + "日";
        ctx.fillText(str,64,128);
    }
</script>
</body>
</html>

 

 

完整源代码如附件

 

 

如有转载,请保留以下内容  
 author: mooring

 site: http://mooring.iteye.com/

 date: 2012/07/15

 

 

 

  • 大小: 34.6 KB
分享到:
评论

相关推荐

    html5 canvas云粒子数字时钟动画特效

    在这个“html5 canvas云粒子数字时钟动画特效”中,我们看到的是Canvas技术与时间显示、粒子系统相结合的应用实例。下面将详细阐述相关知识点。 1. HTML5 Canvas API: HTML5 Canvas是一个基于矢量图形的画布,...

    15个超绚丽的HTML5 Canvas时钟动画特效

    之前我们有给大家介绍过很多基于...这次要分享的是15个超绚丽的HTML5 Canvas时钟动画特效,它们很多都有各自不同的外观,有几个时钟的造型还非常新颖奇特,因为是基于HTML5 Canvas的,所以你的浏览器需要支持HTML5。

    HTML5 Canvas绘制时钟

    这个示例不仅可以帮助学习者理解HTML5 Canvas的基本绘图功能,还可以作为开发自定义时钟、计时器或动画效果的起点。开发者可以在此基础上添加更多功能,例如,添加数字显示、背景渐变或自定义样式。 总之,HTML5 ...

    HTML5 canvas数字时钟15种样式代码.zip

    总结来说,"HTML5 canvas数字时钟15种样式代码.zip"是一个展示HTML5 canvas和JavaScript结合应用的精彩实例,涵盖了图形绘制、时间处理、动画制作等多个方面,对于提升开发者在Web前端领域的技能非常有帮助。...

    HTML5 Canvas创意时钟特效.zip

    在这个"HTML5 Canvas创意时钟特效"中,我们主要关注的是如何利用JavaScript和HTML5 Canvas API来创建一个创新且引人注目的时钟动画。 首先,Canvas是一个二维绘图上下文,它通过JavaScript提供了对像素级别的操作。...

    HTML5 Canvas圆形灯笼时钟动画特效.zip

    这款"HTML5 Canvas圆形灯笼时钟动画特效"就是利用Canvas API实现的一个独特设计,将时钟的界面设计成具有传统中国特色的红色灯笼样式,为网页添加了一种别样的互动体验。 首先,我们来看Canvas的基本概念。Canvas是...

    HTML5 canvas时钟效果.zip

    在这个“HTML5 canvas时钟效果.zip”压缩包中,包含了一个使用Canvas API实现的时钟显示功能。这个时钟不仅绘制了表盘、时针、分针和秒针,还展示了数字时间,为网页增添了一种实用且动态的元素。 1. **Canvas基本...

    HTML5:canvas制作时钟

    HTML5 Canvas 制作时钟 HTML5 的 Canvas 元素提供了一个强大的绘图功能,通过使用 JavaScript 可以在Canvas上绘制各种图形和动画。在这篇文章中,我们将使用 HTML5 的 Canvas 元素来制作一个时钟。 Canvas 元素...

    html5 canvas制作15种数字时钟样式代码

    在这个项目中,“html5 canvas制作15种数字时钟样式代码”是利用Canvas API创建了十五种不同设计风格的数字时钟。这些时钟样式丰富多样,可以满足不同的设计需求,为网页添加独特的视觉效果。 1. **Canvas基础知识*...

    基于canvas的粒子时钟动画

    基于canvas的粒子时钟动画,用浏览器打开就能看到效果

    HTML5 Canvas 圆形时钟动画

    前不久我们刚为大家分享过一款很不错的jQuery/CSS3带数字时钟的圆盘时钟...今天我们要继续为大家介绍另外一个基于HTML5 Canvas的圆形时钟动画。它的功能非常简单,就是一个简单的时钟,时针分针和秒针的颜色各不相同。

    HTML5 Canvas爱心时钟代码.zip

    这个"HTML5 Canvas爱心时钟代码.zip"压缩包包含了一个独特的网页特效,即一个由爱心组成的数字时钟。这个时钟不仅展示时间,还以一种视觉上吸引人的方式呈现,使得它成为一种创意的网页设计元素。 首先,让我们深入...

    HTML5 Canvas粒子数字时钟特效.zip

    在这个“HTML5 Canvas粒子数字时钟特效”中,开发者利用Canvas API创建了一个独特的数字时钟,结合了粒子动画效果,为用户带来了一种新颖的视觉体验。 首先,我们要理解Canvas的基本概念。HTML5的 `&lt;canvas&gt;` 标签...

    html5 canvas圆形时钟代码.zip

    这个"html5 canvas圆形时钟代码.zip"压缩包很显然是一个关于使用HTML5 Canvas创建动态圆形时钟的示例项目。接下来,我们将深入探讨相关知识点。 1. HTML5 Canvas API: HTML5 Canvas是一个基于矢量图形的元素,它...

    h5,canvas实现时钟.zip

    总结来说,"h5,canvas实现时钟"是一个结合了HTML5 Canvas API、数学运算、颜色处理和动画技巧的实例。通过学习和实践这个项目,开发者不仅可以深入理解Canvas的绘图机制,还能提升动态效果和用户体验的设计能力。

    HTML5 Canvas红色灯笼时钟动画.zip

    在这个“HTML5 Canvas红色灯笼时钟动画”项目中,开发者利用Canvas API创建了一个具有红色灯笼主题的动态时钟,这个时钟能够根据用户的电脑时间实时更新显示。 首先,我们来了解一下Canvas的基本概念。HTML5中的`...

    HTML5 canvas超逼真的模拟时钟特效

    "HTML5 canvas超逼真的模拟时钟特效"是利用这一技术创建的一个互动时钟应用,名为thooClock。这款特效时钟不仅外观逼真,还具备了现实生活中时钟的全部功能,如显示当前时间,而且增加了定时闹钟的特性,使得网页上...

Global site tag (gtag.js) - Google Analytics