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 相关文章推荐
基于jquery+thickbox仿校内登录注册框
Jun 07 Javascript
基于javascript 闭包基础分享
Jul 10 Javascript
jQuery 事件的命名空间简单了解
Nov 22 Javascript
Js实现动态添加删除Table行示例
Apr 14 Javascript
node.js中watch机制详解
Nov 17 Javascript
简述JavaScript的正则表达式中test()方法的使用
Jun 16 Javascript
tuzhu_req.js 实现仿百度图片首页效果
Aug 11 Javascript
javascript数据类型详解
Feb 07 Javascript
JS动画实现回调地狱promise的实例代码详解
Nov 08 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
Apr 11 Javascript
JS中队列和双端队列实现及应用详解
Sep 29 Javascript
详解JavaScript 中的批处理和缓存
Nov 19 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的优点与缺点
2013/04/11 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
vue2.0 路由模式mode=&quot;history&quot;的作用
2018/10/18 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
python通过ElementTree操作XML获取结点读取属性美化XML
2013/12/02 Python
python学习数据结构实例代码
2015/05/11 Python
python抓取最新博客内容并生成Rss
2015/05/17 Python
详解Python中类的定义与使用
2017/04/11 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
python函数的作用域及关键字详解
2019/08/20 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
用python实现学生管理系统
2020/07/24 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
求职信内容考虑哪几点
2013/10/05 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
大学生村官承诺书
2014/03/28 职场文书
党员志愿者活动总结
2014/06/26 职场文书
小学教师求职信范文
2015/03/20 职场文书
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android