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 通用简单的table选项卡实现
May 07 Javascript
Jquery replace 字符替换实现代码
Dec 02 Javascript
js 回车提交表单两种实现方法
Dec 31 Javascript
javascript中解析四则运算表达式的算法和示例
Aug 11 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
Nov 23 Javascript
jquery ajax双击div可直接修改div中的内容
Mar 04 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
Feb 19 Javascript
微信小程序登录态控制深入分析
Apr 12 Javascript
jQuery使用bind函数实现绑定多个事件的方法
Oct 11 jQuery
javascript实现QQ空间相册展示源码
Dec 12 Javascript
详解angular路由高亮之RouterLinkActive
Apr 28 Javascript
vue实现分页加载效果
Dec 24 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
PHP+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
jQuery Mobile 导航栏代码
2013/11/01 Javascript
浅析jQuery1.8的几个小变化
2013/12/10 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
JSON格式化输出
2014/11/10 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
2020/09/10 Javascript
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
详解python3实现的web端json通信协议
2016/12/29 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
基于Python中的yield表达式介绍
2019/11/19 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
世界第一曲奇连锁店:Mrs. Fields Cookies
2017/02/04 全球购物
班主任寄语大全
2014/04/04 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
汽车广告策划方案
2014/05/31 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
2014年仓库工作总结
2014/11/20 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
求职信如何撰写?
2019/05/22 职场文书