使用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 11 Javascript
js禁止小键盘输入数字功能代码
Aug 01 Javascript
js模仿jquery的写法示例代码
Jun 16 Javascript
jQuery向后台传入json格式数据的方法
Feb 13 Javascript
用window.onerror捕获并上报Js错误的方法
Jan 27 Javascript
简单实现js无缝滚动效果
Feb 05 Javascript
BootStrap selectpicker后台动态绑定数据
Jun 01 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
Jul 28 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
Aug 17 jQuery
微信小程序实现横向增长表格的方法
Jul 24 Javascript
在vue中使用express-mock搭建mock服务的方法
Nov 07 Javascript
Node.js web 应用如何封装到Docker容器中
Sep 01 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版自动生成文章摘要
2008/07/23 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
JS动态加载脚本并执行回调操作
2016/08/24 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
js动态引入的四种方法
2018/05/05 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
Python数据库的连接实现方法与注意事项
2016/02/27 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
python实现五子棋游戏
2019/06/18 Python
python顺序执行多个py文件的方法
2019/06/29 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
优秀社区干部事迹材料
2014/02/03 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
先进集体申报材料
2014/12/25 职场文书
党员自我评价2015
2015/03/03 职场文书
2015员工年度考核评语
2015/03/25 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
win7配置本地ftp服务器的图文教程
2022/08/05 Servers