📜  SVG-时钟(1)

📅  最后修改于: 2023-12-03 15:05:25.153000             🧑  作者: Mango

SVG 时钟介绍

SVG (Scalable Vector Graphics) 是一种使用 XML 描述 2D 图形的格式。因为其矢量方式的特性,使得 SVG 在放大和缩小时不会失去图形质量。其中,SVG 时钟是一种比较常见的使用 SVG 技术创建的时钟。

SVG 时钟特点
  • SVG 时钟具有良好的可扩展性
  • SVG 时钟采用矢量方式绘制,缩放不失真
  • SVG 时钟可以使用 HTML、CSS 和 JavaScript 来控制
  • SVG 时钟可以通过修改 SVG 文件的属性来定制
SVG 时钟实现

SVG 时钟通常需要使用 SVG 的 <circle><line><path> 等元素,配合 CSS 和 JavaScript 实现。下面是一个简单的 SVG 时钟实现,该时钟使用了一个 <circle> 元素、三个 <line> 元素以及 JavaScript 控制时钟指针的旋转。

<svg width="200" height="200">
  <circle cx="100" cy="100" r="90" stroke="black" stroke-width="2" fill="none"></circle>
  <line x1="100" y1="100" x2="100" y2="30" stroke="black" stroke-width="2" transform="rotate(90, 100, 100)" id="hour"></line>
  <line x1="100" y1="100" x2="100" y2="20" stroke="black" stroke-width="2" transform="rotate(180, 100, 100)" id="minute"></line>
  <line x1="100" y1="100" x2="100" y2="10" stroke="red" stroke-width="2" transform="rotate(270, 100, 100)" id="second"></line>
</svg>

<script>
  function runClock() {
    const now = new Date();
    const hour = now.getHours() % 12;
    const minute = now.getMinutes();
    const second = now.getSeconds();

    document.getElementById('hour').setAttribute('transform', `rotate(${hour * 30}, 100, 100)`);
    document.getElementById('minute').setAttribute('transform', `rotate(${minute * 6}, 100, 100)`);
    document.getElementById('second').setAttribute('transform', `rotate(${second * 6}, 100, 100)`);

    requestAnimationFrame(runClock);
  }

  runClock();
</script>
SVG 时钟的优缺点
优点
  • 支持任意大小的缩放,不失真
  • 可以与 HTML、CSS 和 JavaScript 配合使用
  • 可以实现各种可变的样式和动画效果
缺点
  • 暂不支持呈现复杂的 3D 效果
  • 暂不支持像素处理

综上所述,SVG 时钟虽然有其自身的优势,但也有其局限性。需要根据实际需求选择合适的技术。