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为搜索栏增加tag提示
Jun 22 Javascript
使用jquery实现图文切换效果另加特效
Jan 20 Javascript
JS随机生成不重复数据的实例方法
Jul 17 Javascript
js跳转页面方法总结
Jan 29 Javascript
JavaScript的removeChild()函数用法详解
Dec 27 Javascript
一种新的javascript对象创建方式Object.create()
Dec 28 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
Mar 25 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
Dec 18 Javascript
bootstrapValidator.min.js表单验证插件
Feb 09 Javascript
Angular2 http jsonp的实例详解
Aug 31 Javascript
vue实现商品列表的添加删除实例讲解
May 14 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
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
PHP基于IMAP收取邮件的方法示例
2017/08/07 PHP
php7 新增功能实例总结
2020/05/25 PHP
jquery遍历input取得input的name
2009/04/27 Javascript
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
JS小数运算出现多为小数问题的解决方法
2016/06/02 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
深入理解JavaScript 箭头函数
2019/05/30 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
精选奢华:THE LIST
2019/09/05 全球购物
档案检查欢迎词
2014/01/13 职场文书
中学生自我评价范文
2014/02/08 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
2014大学生中国梦主题教育学习思想汇报
2014/09/10 职场文书
教师先进个人材料
2014/12/17 职场文书
2019个人工作自我评价范文(3篇)
2019/09/19 职场文书
python小程序之飘落的银杏
2021/04/17 Python
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS
html5调用摄像头实例代码
2021/06/28 HTML / CSS