📅  最后修改于: 2023-12-03 15:05:25.153000             🧑  作者: Mango
SVG (Scalable Vector Graphics) 是一种使用 XML 描述 2D 图形的格式。因为其矢量方式的特性,使得 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 时钟虽然有其自身的优势,但也有其局限性。需要根据实际需求选择合适的技术。