SVG实现时钟效果

 更新时间:2018年07月17日 11:32:04   作者:公旦  
这篇文章主要为大家详细介绍了SVG实现时钟效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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实现的动态文字变换

    javascript实现的动态文字变换...
    2007-07-07
  • KnockoutJs快速入门教程

    KnockoutJs快速入门教程

    这篇文章主要为大家分享了KnockoutJs快速入门教程,了解KnockoutJs到底是什么?如何使用KnockoutJS中的data-bind语法来将模型数据绑定到DOM元素中,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • JavaScript prototype 使用介绍

    JavaScript prototype 使用介绍

    用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了,最近看了一些 JavaScript高级程序设计,终于揭开了其神秘面纱
    2013-08-08
  • js中位数不足自动补位扩展padLeft、padRight实现代码

    js中位数不足自动补位扩展padLeft、padRight实现代码

    这篇文章主要介绍了js中位数不足自动补位扩展之padLeft、padRight实现方法,主要是通过String.prototype扩展实现,需要的朋友可以参考下
    2020-04-04
  • 高效的获取当前元素是父元素的第几个子元素

    高效的获取当前元素是父元素的第几个子元素

    例如处理事件的时候,有时候需要知道当前点击的是第几个子节点,而HTML DOM本身并没有直接提供相应的属性,需要自己来计算。感兴趣的朋友可以了解下本文
    2013-10-10
  • Javascript中神奇的this

    Javascript中神奇的this

    这篇文章主要为大家介绍了Javascript中神奇的this,何为this?this的作用有哪些、以及this神奇的绑定规则,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • JS动态显示倒计时效果

    JS动态显示倒计时效果

    这篇文章主要介绍了JS实现倒计时效果动态显示倒计时功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 阻止mousemove鼠标移动或touchmove触摸移动触发click点击事件

    阻止mousemove鼠标移动或touchmove触摸移动触发click点击事件

    这篇文章主要为大家介绍了阻止mousemove或touchmove与click事件同时触发技巧,一个按钮绑定了多个事件,所以就要想办法阻止 mouse 鼠标事件或 touch 触摸事件 与 click 事件同时触发,不然每次拖拽按钮后都会触发 click 事件,这显然是不友好的
    2023-06-06
  • JS出现404错误原理及解决方案

    JS出现404错误原理及解决方案

    这篇文章主要介绍了JS出现404错误原理及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Web开发必知Javascript技巧大全

    Web开发必知Javascript技巧大全

     JavaScript是一个绝冠全球的编程语言,可用于Web开发、移动应用开发(PhoneGap、Appcelerator)、服务器端开发(Node.js和Wakanda)等等,通过本文给大家介绍Web开发必知Javascript技巧大全,需要的朋友参考下吧
    2016-02-02

最新评论