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.ajax传递中文参数的解决方法
May 28 Javascript
JS构建页面的DOM节点结构的实现代码
Dec 09 Javascript
JQuery中serialize() 序列化
Mar 13 Javascript
jquery遍历函数siblings()用法实例
Dec 24 Javascript
jQuery基于cookie实现的购物车实例分析
Dec 24 Javascript
玩转JavaScript OOP - 类的实现详解
Jun 08 Javascript
详解Vue-cli 创建的项目如何跨域请求
May 18 Javascript
Angular 作用域scope的具体使用
Dec 11 Javascript
js+html5实现手机九宫格密码解锁功能
Jul 30 Javascript
vue中使用rem布局代码详解
Oct 30 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
Aug 24 Javascript
一篇文章学会Vue中间件管道
Jun 20 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
PHP+DBM的同学录程序(3)
2006/10/09 PHP
自己写了一个php检测文件编码的函数
2014/04/21 PHP
PHP导入导出Excel代码
2015/07/07 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
详解JS数值Number类型
2018/02/07 Javascript
基于JS实现html中placeholder属性提示文字效果示例
2018/04/19 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
详解vue-video-player使用心得(兼容m3u8)
2019/08/23 Javascript
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
使用matplotlib画散点图的方法
2018/05/25 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
TensorFlow实现Logistic回归
2018/09/07 Python
python里dict变成list实例方法
2019/06/26 Python
Django 请求Request的具体使用方法
2019/11/11 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
Python使用Turtle库绘制一棵西兰花
2019/11/23 Python
通过python检测字符串的字母
2020/02/18 Python
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
《望洞庭》教学反思
2014/02/16 职场文书
《钱学森》听课反思
2014/03/01 职场文书
师范生自荐信模板
2014/05/28 职场文书
网站文案策划岗位职责
2015/04/14 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书