SVG实现时钟效果


Posted in Javascript onJuly 17, 2018

本文实例为大家分享了SVG实现时钟效果的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html>

<head>
 <meta charset="utf-8"/>
 <title></title>
 <style>
  * {
   margin: 0;
  }
 </style>
</head>

<body>
<svg width="400" height="400">
 <title>SVG Analog Clock</title>
 <circle id="face" cx="125" cy="125" r="100"
     style="fill: #f1f1f1; stroke: #000;"></circle>
 <g id="ticks" transform="translate(125, 125)">
  <path id="triangle" d="M95 0 L 100 -5 L 100 5 Z"
     transform="rotate(360)"></path>
 </g>
 <g id="hands">
  <path id="hour" d="M 125 125 V 75"
     style="fill: none; stroke: black; stroke-width: 6"
     transform="rotate(0)"></path>

  <path id="minute" d="M 125 125 V 50"
     style="fill: none; stroke: black; stroke-width: 4"
     transform="rotate(0)"></path>

  <path id="second" d="M 125 125 Q 100 100 125 80 T 125 40 V 30"
     style="fill: none; stroke: #f00; stroke-width: 2"
     transform="rotate(0)"></path>
 </g>
 <g id="knob" transform="translate(125, 125)">
  <circle cx="0" cy="0" r="6" style="fill: #333;"></circle>
 </g>
</svg>

<script>
 var svgns = "http://www.w3.org/2000/svg";
 var face = document.getElementById("face"),
   ticks = document.getElementById("ticks"),
   triangle = document.getElementById("triangle"),
   txt = document.getElementById("txt");

 for (var i = 0; i < 11; i++) {
  var temp_triangle = triangle.cloneNode(true);
  var angle = i * 30 + 30;
  temp_triangle.setAttribute("transform", "rotate(" + angle + ")");
  ticks.appendChild(temp_triangle);
  ticks.setAttribute("transform", "translate(125, 125), rotate(-90)");
 }

 var hourHand = document.getElementById("hour"),
   minuteHand = document.getElementById("minute"),
   secondHand = document.getElementById("second");
 var hourTransform, minuteTransform, secondTransform;
 var secPer12Hours = 60 * 60 * 12,
   secPerHour = 60 * 60,
   secPerMinute = 60;

 (function init() {
  hourTransform = hourHand.transform.baseVal.getItem(0);
  minuteTransform = minuteHand.transform.baseVal.getItem(0);
  secondTransform = secondHand.transform.baseVal.getItem(0);
  updateClock();
 })()

 function updateClock() {
  var date = new Date();
  var sec = date.getMilliseconds() / 1000 +
    date.getSeconds() +
    date.getMinutes() * 60 +
    date.getHours() * 60 * 60;
  var hourAngle = (sec % secPer12Hours) * 360 / secPer12Hours,
    minuteAngle = (sec % secPerHour) * 360 / secPerHour,
    secondAngle = (sec % secPerMinute) * 360 / secPerMinute;
  hourTransform.setRotate(hourAngle, 125, 125);
  minuteTransform.setRotate(minuteAngle, 125, 125);
  secondTransform.setRotate(secondAngle, 125, 125);
  window.requestAnimationFrame(updateClock);
 }

</script>
</body>

</html>

浏览器需要支持:requestAnimationFrame
有关requestAnimationFrame的相关知识请自行查阅

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

Javascript 相关文章推荐
Javascript 设计模式(二) 闭包
May 26 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
Jan 16 Javascript
js 遍历json返回的map内容示例代码
Oct 29 Javascript
JS传值出现中文参数乱码的解决方法
Jun 30 Javascript
微信小程序 教程之事件
Oct 18 Javascript
利用JQuery阻止事件冒泡
Dec 01 Javascript
JS 在数组指定位置插入/删除数据的方法
Jan 12 Javascript
JS计算两个时间相差分钟数的方法示例
Jan 10 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
Nov 21 Javascript
JS数组求和的常用方法实例小结
Jan 07 Javascript
详解微信小程序工程化探索之webpack实战
Apr 20 Javascript
HTML+JS实现在线朗读器
Feb 15 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
Jul 17 #Javascript
基于D3.js实现时钟效果
Jul 17 #Javascript
vue生成token并保存到本地存储中
Jul 17 #Javascript
vue脚手架搭建项目的兼容性配置详解
Jul 17 #Javascript
使用svg实现动态时钟效果
Jul 17 #Javascript
详解.vue文件中style标签的几个标识符
Jul 17 #Javascript
webstrom Debug 调试vue项目的方法步骤
Jul 17 #Javascript
You might like
农民C键的运用技巧
2020/03/04 星际争霸
php下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
33种Javascript 表格排序控件收集
2009/12/03 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
javascript与jquery中跳出循环的区别总结
2013/11/04 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
利用JS实现简单的瀑布流加载图片效果
2017/04/22 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
python计算书页码的统计数字问题实例
2014/09/26 Python
python logging类库使用例子
2014/11/22 Python
python删除列表内容
2015/08/04 Python
Python2和Python3中print的用法示例总结
2017/10/25 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
Python实现括号匹配方法详解
2020/02/10 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
网络工程专业毕业生推荐信
2013/10/28 职场文书
广告业务员岗位职责
2014/02/06 职场文书
大堂副理的岗位职责范文
2014/02/17 职场文书
公司管理建议书范文
2014/03/12 职场文书
安全责任书范本
2014/04/15 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
项目合作协议书
2014/09/23 职场文书