使用svg实现动态时钟效果


Posted in Javascript onJuly 17, 2018

一个使用svg做的动态时钟,供大家参考,具体内容如下

怎么样很酷吧,以下是源码:

<!DOCTYPE html>
<html>
  <title>SVG clock</title>
      <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <!-- Bootstrap -->
  <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.3/css/bootstrap.min.css" rel="external nofollow" >
  <!-- <link rel="stylesheet" type="text/css" href="canvas.css" rel="external nofollow" media="all" />-->
  <style type="text/css">
    #clock {  
      stroke: #adcd3c;
      stroke-linecap: round;
      fill: #f2fddb;
    }
    #face {
      stroke-width: 3px;      
    }
    #ticks {
      stroke-width: 2px;
    }
    #hands line {        
      stroke-linejoin: bevel;        
    }
    #hourhand {
      stroke-width: 4px;            
    }
    #minutehand {
      stroke-width: 3px;        
    }
    #numbers {
      font-size: 16px;
      text-anchor: middle;
      stroke: none;
      fill: #92b0dd;
    }
  </style>
  <script type="text/javascript">
    function updateTime() {
      var now = new Date();
      var second = now.getSeconds();
      var min = now.getMinutes();
      var hour = (now.getHours() % 12) + min / 60;
      var secondangle = second * 6; //6 degrees for every minute
      var minangle = min * 6;    //6 degrees for every minute
      var hourangle = hour * 30;  //30 degrees for every hour
      
      var minhand = document.getElementById('minutehand');
      var hourhand = document.getElementById('hourhand');      
      var secondhand = document.getElementById('secondhand');
      var shadhand = document.getElementById("shadow");
      var clocks = document.getElementById("clock");
      if(second%2==0){
        //alert(clocks);
          clocks.style.stroke="#adcd3c";
        }else{
          //alert(secondangle);
          clocks.style.stroke="#ad223c";
      }
      
      minhand.setAttribute('transform', 'rotate(' + minangle + ', 50, 50)');
      hourhand.setAttribute('transform', 'rotate(' + hourangle + ', 50, 50)');
      secondhand.setAttribute('transform', 'rotate(' + secondangle + ', 50, 50)');
      for (var i = shadhand.childElementCount - 1; i >= 0; i--) {
       var chr = shadhand.children[i];
        switch (chr.tagName)
              {
              case "feGaussianBlur":
              /*if(secondangle/2)==1){
               chr.setAttribute(dx=-1)
                }else{
                  chr.setAttribute(dx=1)
                }
               alert(chr.tagName);*/
               break;
              case "feOffset":
              if(second%2==0){
                //alert(secondangle);
                  chr.setAttribute("dx","-3");
                }else{
                  //alert(secondangle);
                  chr.setAttribute("dx","3");
                }
               //alert(chr.tagName);
               break;
              case "feMerge":
                /*for (var i = 0; i < chr.childElementCount -1; i++) {
                  chr.children[i].
                };*/
               //alert(chr.tagName);
               break;
              default:
               alert("could not found the Attribute");
              }
      };
 
      setTimeout(updateTime, 1000); //update time for every second
    }
  </script>
<body onload="updateTime()">
  <svg id="clock" viewBox="0 0 100 100" width="500" height="500">
    <defs>
      <!-- define an filter use to add shadow of some element -->
      <filter id="shadow" x="-50%" y="-50%" width="200%" height="200%">
        <feGaussianBlur in="SourceGraphic" stdDeviation="1" result="blur" />
        <feOffset in="blur" dx="-1" dy="1" result="shadow" lighting-color = "#adcd3c"/>
        <feMerge>
          <feMergeNode in="SourceGraphic"/>
          <feMergeNode in="shadow" />
        </feMerge>
      </filter>
    </defs>
    <!-- clock face -->
    <circle id="face" cx="50" cy="50" r="45" />
    <!-- mark time lines -->
    <g id="ticks">
      <line x1="50.00" y1="5.000" x2="50.00" y2="10.00" />
      <line x1="72.50" y1="11.03" x2="70.00" y2="15.36" />
      <line x1="88.97" y1="27.50" x2="84.64" y2="30.00" />
      <line x1="95.00" y1="50.00" x2="90.00" y2="50.00" />
      <line x1="88.97" y1="72.50" x2="84.64" y2="70.00" />
      <line x1="72.50" y1="88.90" x2="70.00" y2="84.64" />
      <line x1="50.00" y1="95.00" x2="50.00" y2="90.00" />
      <line x1="27.50" y1="88.90" x2="30.00" y2="84.64" />
      <line x1="11.03" y1="72.50" x2="15.36" y2="70.00" />
      <line x1="5.000" y1="50.00" x2="10.00" y2="50.00" />
      <line x1="11.03" y1="27.50" x2="15.36" y2="30.00" />
      <line x1="27.50" y1="11.00" x2="30.00" y2="15.36" />
    </g>
    <!-- mark some important numbers -->
    <g id="numbers"> 
      <text x="50" y="20">12</text>
      <text x="85" y="55">3</text>
      <text x="50" y="88">6</text>
      <text x="15" y="55">9</text>      
    </g>
    <!-- show hands -->
    <g id="hands" filter="url(#shadow)">
      <line id="hourhand" x1="50" y1="50" x2="50" y2="24" />
      <line id="minutehand" x1="50" y1="50" x2="50" y2="20" />
      <line id="secondhand" x1="50" y1="50" x2="50" y2="16" />
    </g>    
  </svg>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 火狐(firefox)不显示本地图片问题解决
Jul 05 Javascript
IE6下CSS图片缓存问题解决方法
Dec 09 Javascript
JS实现图片放大镜效果的方法
Feb 27 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
Oct 18 Javascript
基于JavaScript实现简单的音频播放功能
Jan 07 Javascript
使用Vue组件实现一个简单弹窗效果
Apr 23 Javascript
Vue中util的工具函数实例详解
Jul 08 Javascript
countUp.js实现数字滚动效果
Oct 18 Javascript
Vue 实现html中根据类型显示内容
Oct 28 Javascript
微信小程序实现弹框效果
May 26 Javascript
基于javascript处理nginx请求过程详解
Jul 07 Javascript
(开源)微信小程序+mqtt,esp8266温湿度读取
Apr 02 Javascript
详解.vue文件中style标签的几个标识符
Jul 17 #Javascript
webstrom Debug 调试vue项目的方法步骤
Jul 17 #Javascript
vue实现未登录跳转到登录页面的方法
Jul 17 #Javascript
打通前后端构建一个Vue+Express的开发环境
Jul 17 #Javascript
详解如何从零开始搭建Express+Vue开发环境
Jul 17 #Javascript
微信小程序自定义组件之可清除的input组件
Jul 17 #Javascript
微信小程序倒计时功能实例代码
Jul 17 #Javascript
You might like
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
PHP基于imap获取邮件实例
2014/11/11 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
javascript 写类方式之七
2009/07/05 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
jquery实现动态画圆
2014/12/04 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
js实现页面图片消除效果
2020/03/24 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
python自动化生成IOS的图标
2018/11/13 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
Python格式化输出--%s,%d,%f的代码解析
2020/04/29 Python
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
儿媳婚宴答谢词
2014/01/14 职场文书
粗加工管理制度
2014/02/04 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
幼儿生日活动方案
2014/08/27 职场文书
个人整改方案范文
2014/10/25 职场文书
javascript实现计算器功能详解流程
2021/11/01 Javascript
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
springcloud整合seata
2022/05/20 Java/Android
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang