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 相关文章推荐
当前页禁止复制粘贴截屏代码小集
Jul 24 Javascript
jQuery 滑动方法slideDown向下滑动元素
Jan 16 Javascript
javaScript使用EL表达式的几种方式
May 27 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
Apr 06 Javascript
深入分析Javascript跨域问题
Apr 17 Javascript
javascript实现保留两位小数的多种方法
Dec 18 Javascript
很全面的JavaScript常用功能汇总集合
Jan 22 Javascript
js+html5实现的自由落体运动效果代码
Jan 28 Javascript
js仿小米手机上下滑动效果
Feb 05 Javascript
HTML的select控件美化
Mar 27 Javascript
详解Vue路由钩子及应用场景(小结)
Nov 07 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
Dec 27 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
PHP 日常开发小技巧
2009/09/23 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
async和DOM Script文件加载比较
2014/07/20 PHP
浅谈php的优缺点
2015/07/14 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
JavaScript 动态生成方法的例子
2009/07/22 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
python实现学生管理系统
2018/01/11 Python
python 图片去噪的方法示例
2019/07/09 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
UML设计模式笔试题
2014/06/07 面试题
中式餐厅创业计划书范文
2014/01/23 职场文书
建设工程授权委托书
2014/09/22 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
明确岗位职责
2015/02/14 职场文书
大学生个人学年总结
2015/02/15 职场文书
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js