使用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 相关文章推荐
动态改变textbox的宽高的js
Oct 26 Javascript
JavaScript初学者需要了解10个小技巧
Aug 25 Javascript
jquery.qrcode在线生成二维码使用示例
Aug 21 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
Jul 27 Javascript
Bootstrap中datetimepicker使用小结
Dec 28 Javascript
Vuex简单入门
Apr 19 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
May 02 Javascript
vue实现点击图片放大效果
Aug 15 Javascript
微信小程序按钮去除边框线分享页面功能
Aug 27 Javascript
VUE+Element环境搭建与安装的方法步骤
Jan 24 Javascript
微信小程序列表时间戳转换实现过程解析
Oct 12 Javascript
vue 需求 data中的数据之间的调用操作
Aug 05 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基础教程
2015/08/26 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
Ionic快速安装教程
2016/06/03 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
2018/01/07 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
Python pickle模块用法实例分析
2015/05/27 Python
Python用字典构建多级菜单功能
2019/07/11 Python
Django中URL的参数传递的实现
2019/08/04 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
Python语言异常处理测试过程解析
2020/01/08 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
django跳转页面传参的实现
2020/09/17 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
C语言编程题
2015/03/09 面试题
国家助学金感谢信
2015/01/21 职场文书
通知书大全
2015/04/27 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
学生检讨书范文
2019/06/24 职场文书
话题作文之学会尊重
2019/12/16 职场文书
Mysql案例刨析事务隔离级别
2021/09/25 MySQL