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 相关文章推荐
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
Jun 04 Javascript
使用PHP+JQuery+Ajax分页的实现
Apr 23 Javascript
jQuery插件开发详细教程
Jun 06 Javascript
浅谈javascript中自定义模版
Jan 29 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
Jun 18 Javascript
微信jssdk用法汇总
Jul 16 Javascript
基于Three.js插件制作360度全景图
Nov 29 Javascript
Vue.js 表单控件操作小结
Mar 29 Javascript
Vue插件打包与发布的方法示例
Aug 20 Javascript
vue slots 组件的组合/分发实例
Sep 06 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
May 08 Javascript
如何用JS模拟实现数组的map方法
Jul 30 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
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
php类的定义与继承用法实例
2015/07/07 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
PDO::inTransaction讲解
2019/01/28 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
PHP递归统计系统中代码行数
2019/09/19 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python实现Linux下守护进程的编写方法
2014/08/22 Python
对于Python装饰器使用的一些建议
2015/06/03 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
详解python3中的真值测试
2018/08/13 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
高级技校毕业生自荐信
2013/11/18 职场文书
银行实习鉴定
2013/12/13 职场文书
绘画专业自荐信范文
2014/02/23 职场文书
社区义诊活动总结
2014/04/30 职场文书
工商管理本科生求职信
2014/07/13 职场文书
销售人才自我评价范文
2014/09/27 职场文书
小学假期安全广播稿
2014/09/28 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
银行求职信模板
2015/03/20 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技