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 相关文章推荐
删除重复数据的算法
Nov 23 Javascript
javascript window对象属性整理
Oct 24 Javascript
javascript+iframe 实现无刷新载入整页的代码
Mar 17 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
通过url查找a元素并点击
Apr 09 Javascript
AngularJS 过滤器的简单实例
Jul 27 Javascript
原生js代码实现图片放大境效果
Oct 30 Javascript
Vue实现内部组件轮播切换效果的示例代码
Apr 07 Javascript
JS温故而知新之变量提升和时间死区
Jan 27 Javascript
javascript实现点亮灯泡特效示例
Oct 15 Javascript
JS深入学习之数组对象排序操作示例
May 01 Javascript
关于React Native使用axios进行网络请求的方法
Aug 02 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
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
php类中的各种拦截器用法分析
2014/11/03 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
javascript新手语法小结
2008/06/15 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
javascript连续赋值问题
2015/07/08 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
基于javascript实现的快速排序
2016/12/02 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
2017/12/01 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
vue自定义指令实现仅支持输入数字和浮点型的示例
2019/10/30 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
Python中使用SAX解析xml实例
2014/11/21 Python
python3操作mysql数据库的方法
2017/06/23 Python
python 重命名轴索引的方法
2018/11/10 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
Django实现文件上传下载功能
2019/10/06 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
html5实现滑块功能之type=&quot;range&quot;属性
2020/02/18 HTML / CSS
食堂员工工作职责
2013/12/18 职场文书
区域销售主管岗位职责
2014/06/15 职场文书
工作态度怎么写
2015/06/25 职场文书
茶花女读书笔记
2015/06/29 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
使用nginx配置访问wgcloud的方法
2021/06/26 Servers