欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SVG实现时钟效果

程序员文章站 2023-10-29 23:04:34
本文实例为大家分享了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的相关知识请自行查阅

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。