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 $(document).ready() 与window.onload的区别
Dec 28 Javascript
jQuery 开发者应该注意的9个错误
May 03 Javascript
js中定义一个变量并判断其是否为空的方法
May 13 Javascript
JS实现网页滚动条感应鼠标变色的方法
Feb 26 Javascript
更高效的使用JQuery 这里总结了8个小技巧
Apr 13 Javascript
Javascript中级语法快速入手
Jul 30 Javascript
Bootstrap table 定制提示语的加载过程
Feb 20 Javascript
BootStrap 动态表单效果
Jun 02 Javascript
基于vue2实现左滑删除功能
Nov 28 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
Feb 08 Javascript
jQuery实现的隔行变色功能【案例】
Feb 18 jQuery
前端开发之便利店收银系统代码
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创建动态图像
2006/10/09 PHP
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
js动态生成指定行数的表格
2013/07/11 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
Python脚本实现下载合并SAE日志
2015/02/10 Python
python对数组进行反转的方法
2015/05/20 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
django+mysql的使用示例
2018/11/23 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
用Python解决x的n次方问题
2019/02/08 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
python如何读取bin文件并下发串口
2019/07/05 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
Python爬取梨视频的示例
2021/01/29 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
学生思想表现的评语
2014/01/30 职场文书
入学申请自荐信范文
2014/02/26 职场文书
学生检讨书范文
2015/01/27 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server