当前位置:首页 > CSS

css动画时钟制作

2026-04-01 21:39:27CSS

使用CSS制作动画时钟

通过CSS的transformanimation属性可以创建平滑的时钟动画效果,结合JavaScript动态更新时间指针角度。

HTML结构

创建时钟的基本DOM结构,包含表盘、时针、分针和秒针:

<div class="clock">
  <div class="hand hour"></div>
  <div class="hand minute"></div>
  <div class="hand second"></div>
</div>

CSS样式

定义时钟外观和动画效果:

.clock {
  width: 200px;
  height: 200px;
  border: 10px solid #333;
  border-radius: 50%;
  position: relative;
  margin: 50px auto;
}

.hand {
  position: absolute;
  bottom: 50%;
  left: 50%;
  transform-origin: 50% 100%;
  background: #000;
}

.hour {
  width: 6px;
  height: 60px;
  margin-left: -3px;
}

.minute {
  width: 4px;
  height: 80px;
  margin-left: -2px;
}

.second {
  width: 2px;
  height: 90px;
  background: red;
  margin-left: -1px;
  transition: transform 0.2s cubic-bezier(0.4, 2.3, 0.3, 1);
}

JavaScript动态控制

通过计算当前时间确定指针角度:

function updateClock() {
  const now = new Date();
  const hour = now.getHours() % 12;
  const minute = now.getMinutes();
  const second = now.getSeconds();

  const hourDeg = (hour * 30) + (minute * 0.5);
  const minuteDeg = minute * 6;
  const secondDeg = second * 6;

  document.querySelector('.hour').style.transform = `rotate(${hourDeg}deg)`;
  document.querySelector('.minute').style.transform = `rotate(${minuteDeg}deg)`;
  document.querySelector('.second').style.transform = `rotate(${secondDeg}deg)`;
}

setInterval(updateClock, 1000);
updateClock();

纯CSS动画时钟方案

不需要JavaScript的简化版本,利用CSS变量和动画实现:

关键CSS代码

:root {
  --second: 0;
  --minute: 0;
  --hour: 0;
}

.second {
  animation: rotate 60s linear infinite;
}

.minute {
  animation: rotate 3600s linear infinite;
}

.hour {
  animation: rotate 43200s linear infinite;
}

@keyframes rotate {
  to { transform: rotate(360deg); }
}

添加时钟刻度

增强视觉效果的表盘刻度:

css动画时钟制作

.clock::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 12px;
  height: 12px;
  background: #333;
  border-radius: 50%;
  transform: translate(-50%, -50%);
}

/* 添加12个刻度 */
.clock {
  background: 
    linear-gradient(30deg, transparent 48%, #333 48%, #333 52%, transparent 52%),
    linear-gradient(60deg, transparent 48%, #333 48%, #333 52%, transparent 52%),
    linear-gradient(90deg, transparent 48%, #333 48%, #333 52%, transparent 52%),
    /* 其他角度省略... */
    white;
}

标签: 时钟动画
分享给朋友:

相关文章

利用css3制作动画

利用css3制作动画

CSS3 动画基础 CSS3 通过 @keyframes 规则和 animation 属性实现动画效果。@keyframes 定义动画的关键帧,animation 控制动画的播放方式(如持续时间、延迟…

vue如何实现动画

vue如何实现动画

实现 Vue 动画的常见方法 使用 Vue 内置的 <transition> 组件 Vue 提供了 <transition> 组件,用于在元素插入、更新或移除时添加动画效果。通…

vue动画实现跑动

vue动画实现跑动

Vue动画实现跑动效果 在Vue中实现跑动动画可以通过多种方式完成,包括使用Vue的过渡系统、CSS动画或第三方动画库。以下是几种常见的实现方法: 使用Vue过渡和CSS动画 定义CSS关键帧动画来…

vue实现页面动画切换

vue实现页面动画切换

使用 Vue 过渡组件实现动画切换 Vue 提供了内置的 <transition> 和 <transition-group> 组件,可以方便地实现页面或元素的动画切换效果。通过…

vue实现页面载入动画

vue实现页面载入动画

Vue 实现页面载入动画的方法 使用 CSS 动画和 Vue 生命周期钩子 在 Vue 组件的 mounted 或 created 钩子中触发动画效果,结合 CSS 动画或过渡实现平滑的载入效果。C…

vue前端实现时钟

vue前端实现时钟

实现时钟的两种方法 方法一:使用原生JavaScript定时器 在Vue组件的mounted生命周期中启动定时器,更新当前时间数据: <template> <div clas…