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 模式设计之工厂模式学习心得
Apr 27 Javascript
jquery的选择器的使用技巧之如何选择input框
Sep 22 Javascript
select多选 multiple的使用示例
Jun 16 Javascript
js中window.open打开一个新的页面
Aug 10 Javascript
JavaScript里实用的原生API汇总
May 14 Javascript
JS+Canvas绘制时钟效果
Aug 20 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
Apr 27 Javascript
vue计算属性及使用详解
Apr 02 Javascript
jQuery pagination分页示例详解
Oct 23 jQuery
vue+elementUi 实现密码显示/隐藏+小图标变化功能
Jan 18 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
Oct 30 Javascript
vue实现登录功能
Dec 31 Vue.js
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
WordPress网站性能优化指南
2015/11/18 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
基于jquery封装的一个js分页
2011/11/15 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
2013/07/15 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
VUE长按事件需求详解
2017/10/18 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
JS实现简单tab选项卡切换
2019/10/25 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
Python itertools模块详解
2015/05/09 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
Python基础之文件读取的讲解
2019/02/16 Python
Python字符串的常见操作实例小结
2019/04/08 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
sklearn+python:线性回归案例
2020/02/24 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
单位创先争优活动方案
2014/01/26 职场文书
追悼会子女答谢词
2014/01/28 职场文书
勇敢的心观后感
2015/06/09 职场文书
山楂树之恋观后感
2015/06/11 职场文书
汽车销售合同文本
2019/08/08 职场文书
Django实现drf搜索过滤和排序过滤
2021/06/21 Python
SQL之各种join小结详细讲解
2021/08/04 MySQL