使用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 相关文章推荐
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
Dec 08 Javascript
jquery的ajax请求全面了解
Mar 20 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
May 27 Javascript
JS小功能(列表页面隔行变色)简单实现
Nov 28 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
May 07 Javascript
js实现点击左右按钮轮播图片效果实例
Jan 29 Javascript
jQuery找出网页上最高元素的方法
Mar 20 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
Apr 12 Javascript
JQuery为元素添加样式的实现方法
Jul 20 Javascript
javascript 将共享属性迁移到原型中去的实现方法
Aug 31 Javascript
vue组件 $children,$refs,$parent的使用详解
Jul 31 Javascript
node跨域请求方法小结
Aug 25 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多图上传小程序代码
2011/07/17 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
javascript实现倒计时提示框
2021/03/02 Javascript
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
用Python实现数据的透视表的方法
2018/11/16 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
长安大学毕业生自我鉴定
2014/01/17 职场文书
学生会主席事迹材料
2014/01/28 职场文书
司仪主持词两篇
2014/03/22 职场文书
大学生简短的自我评价
2014/09/12 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
学会Python数据可视化必须尝试这7个库
2021/06/16 Python
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏