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 相关文章推荐
JS数组去重与取重的示例代码
Jan 24 Javascript
无刷新预览所选择的图片示例代码
Apr 02 Javascript
javascript中的遍历for in 以及with的用法
Dec 22 Javascript
javascript中Object使用详解
Jan 26 Javascript
使用AngularJS创建自定义的过滤器的方法
Jun 18 Javascript
Vue.js学习笔记之 helloworld
Aug 14 Javascript
解决vue2中使用axios http请求出现的问题
Mar 05 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
Nov 15 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
Apr 10 Javascript
详解小程序如何动态绑定点击的执行方法
Nov 26 Javascript
利用H5api实现时钟的绘制(javascript)
Sep 13 Javascript
JavaScript前后端JSON使用方法教程
Nov 23 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
当海贼王变成JOJO风
2020/03/02 日漫
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
php实现webservice实例
2014/11/06 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
用JavaScript显示随机图像或引用
2009/04/21 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
2013/09/02 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
Js nodeType 属性全面解析
2013/11/14 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
基于jquery插件实现拖拽删除图片功能
2020/08/27 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
JS和Canvas实现图片的预览压缩和上传功能
2018/03/30 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
简单了解如何封装自己的Python包
2020/07/08 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
快速创建python 虚拟环境
2020/11/28 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
运动会广播稿300字
2014/01/10 职场文书
自荐信需注意事项
2014/01/25 职场文书
2014新课程改革心得体会
2014/03/10 职场文书
怎样写离婚协议书
2014/09/10 职场文书
大国崛起日本观后感
2015/06/02 职场文书
师范生教育见习总结
2015/06/23 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP