中博教育南京中博校区

中博教育2013年招生简章
公开课·讲座
讲座主题:

学什么技术有前途

讲座时间:

星期天下午

讲座地点:

中博教育中博校区

主讲老师:

管老师

人数限额:

30

抢座热线:

17368476151

我要定座

?

时钟效果

与在线专业老师直接对话交流
时间:2015-03-14 09:40  来源:教员贾靖文  
时钟效果,很久很久以前由flash提供网页的各种有趣的效果,近些年由html5推出canvas后,canvas与之博弈。现在讲的是用raphaeljs实现时钟效果。

raphaeljs封装了svg和vml操作方法,SVG(Scalable Vector Graphics)可缩放矢量图形。VML(The Vector Markup Language)矢量可标记语言。

先饱饱眼福,win7中的时钟效果show下,见下图:

http://images.cnitblog.com/i/361608/201403/301940261726423.jpg



接下来亮相的时钟效果图(金属光泽的超质感),见下图:
http://images.cnitblog.com/i/361608/201403/301941506418728.jpg

简单描述实现原理:
第一步:画时钟。时钟圆盘、时钟时分秒指针、刻度、时间。画图方法circle、rect、text。
复制代码
// 画时钟表盘
r.circle(150, 150, 140).attr({fill:"r(0.5,0.5)#ffffff-#efefef",stroke:"#cecece","stroke-width":1});
// 画时针
r.rect(144,150,8,100,4).attr({fill:"#ccc",stroke:"none"});
// 画刻度
r.rect(28,145,10,4).attr({fill:"#999",stroke:"none"});
// 画时间
r.text(150,220,(dh+":"+dm+":"+ds)).attr({font: "14px Arial", fill: "#000"});
复制代码

第二步:指针动起来动起来。
复制代码
// 初始化时分秒指针
var d = new Date();
var ds = d.getSeconds();
var dm = d.getMinutes();
var dh = d.getHours();
var dD = d.getDate();
var dM = d.getMonth()+1;
var dY = d.getFullYear();
h.rotate((dh+30+(dm/60)+(ds/(60*60)))*30,150,150); 
m.rotate((dm+30+(ds/60))*6,150,150);
s.rotate((ds+30)*6,150,150);
// 每秒更新指针
setInterval(function(){
    d = new Date();
    ds = d.getSeconds();
    dm = d.getMinutes();
    dh = d.getHours();
    dD = d.getDate();
    dM = d.getMonth()+1;
    dY = d.getFullYear();
 
    h.rotate(6/(60*60),150,150);
    m.rotate(6/60,150,150);
    s.rotate(6,150,150);
},1000);
复制代码
 
第三步:显示时间年月份。
复制代码
// 初始化时间
var txt = r.text(150,220,(dh+":"+dm+":"+ds)).attr({font: "14px Arial", fill: "#000"});
var txt1 = r.text(150,200,dY+"年"+dM+"月"+dD+"日  星期"+txtT.charAt(dT)).attr({font: "14px Arial",fill: "#000"});
// 每秒更新时间
setInterval(function(){
    txt.attr({text:dh+":"+dm+":"+ds});
    txt1.attr({text:dY+"年"+dM+"月"+dD+"日  星期"+txtT.charAt(dT)});
},1000);
复制代码
 

搞定,超爽,感兴趣的可以发挥想象力做出更多时钟效果。
 
最后提供一个完整的可运行DEMO:
<!doctype html>
<html lang="cn">
<head>
    <meta charset="UTF-8">
    <title>时钟效果</title>
    <style>
        *{margin: 0;padding: 0;}
        .main{width:960px; margin: 0px auto;}
        .mainTit{color: #f00; font-size: 50px;font-weight:bold;text-align: center; text-shadow: 3px 1px 6px #f60; padding: 30px 0px;}
        .main .block{width:300px; height: 300px; margin: 0px auto;}
        .main .remark{color: #333;font-size: 12px; text-align: center; margin-top: 100px;}
    </style>
</head>
<body>
    <div class="main">
        <div class="mainTit">时钟</div>
        <div class="block" id="test"></div>
       
    </div>
    <script src="http://files.cnblogs.com/kuikui/jquery-1.10.2.min.js"></script>
    <script src="http://files.cnblogs.com/kuikui/raphael.js"></script>
    <script>
        $(function(){
            var r = Raphael("test",300,300);
            r.circle(150, 150, 140).attr({fill:"r(0.5,0.5)#ffffff-#efefef",stroke:"#cecece","stroke-width":1});
            r.circle(150, 150, 132).attr({fill:"r(0.5,0.5)#ffffff-#efefef",stroke:"#cecece"}).glow({width:8,color:"#aaa"});
            r.circle(150, 150, 100).attr({fill:"#fff",stroke:"none","fill-opacity": 0.3}).glow({width:8,color:"#aaa",offsetx:0,offsety:0});
 
            r.rect(28,145,10,4).attr({fill:"#999",stroke:"none"});
            r.rect(145,28,4,10).attr({fill:"#999",stroke:"none"});
            r.rect(148,265,4,10).attr({fill:"#999",stroke:"none"});
            r.rect(265,148,10,4).attr({fill:"#999",stroke:"none"});
 
            var d = new Date();
            var ds = d.getSeconds();
            var dm = d.getMinutes();
            var dh = d.getHours();
            var dD = d.getDate();
            var dM = d.getMonth()+1;
            var dY = d.getFullYear();
            var dT = d.getDay();
            var txtT = "日一二三四五六";
 
            var txt = r.text(150,220,(dh+":"+dm+":"+ds)).attr({font: "14px Arial", fill: "#000"});
            var txt1 = r.text(150,200,dY+"年"+dM+"月"+dD+"日  星期"+txtT.charAt(dT)).attr({
                            font: "14px Arial",
                            fill: "#000"
                        });
 
            var h = r.rect(144,150,8,100,4).attr({fill:"#ccc",stroke:"none"});
            var m = r.rect(148,150,4,115,2).attr({fill:"#ccc",stroke:"none"});
            var s = r.rect(150,150,1,130).attr({fill:"#f60",stroke:"none"});
 
            r.circle(150, 150, 10).attr({fill:"#f60",stroke:"none"}).glow({width:6,color:"#f60"});
            r.circle(150, 150, 6).attr({fill:"r(0.5,0.5)#ffffff-#efefef",stroke:"none"});
 
            h.rotate((dh+30+(dm/60)+(ds/(60*60)))*30,150,150); 
            m.rotate((dm+30+(ds/60))*6,150,150);
            s.rotate((ds+30)*6,150,150);
 
            setInterval(function(){
                d = new Date();
                ds = d.getSeconds();
                dm = d.getMinutes();
                dh = d.getHours();
                dD = d.getDate();
                dM = d.getMonth()+1;
                dY = d.getFullYear();
                txt.attr({text:dh+":"+dm+":"+ds});
                txt1.attr({text:dY+"年"+dM+"月"+dD+"日  星期"+txtT.charAt(dT)});
                h.rotate(6/(60*60),150,150);
                m.rotate(6/60,150,150);
                s.rotate(6,150,150);
            },1000);
           
        });
    </script>
</body>
</html>
 

分享到:

中博教育南京中博南校区在线咨询
中博教育南京中博校区来校路线
中博教育南京中博校区了解课程
中博教育南京中博校区

作者: 中博教育中博培训学校 原载: 中博教育南京中博校区 www.xueshihou.com
版权所有,转载时必须以链接形式注明作者和原始出处及本声明

------分隔线----------------------------

相关文章

推荐文章


学校简介 | 软件课程 | 测试课程 | 中博教育JAVA/.NET | 安卓课程 | 网络营销 | 就业明星 | 就业保障 | 招生问答 | 在线报名