CSS动画倍速播放

背景

要测试大转盘动画在不同转速下的效果。

通过动画持续时间影响倍速

完成一次动画的持续时间越短,动画越快。因此将初始动画持续时间除以倍速即可。

示例CSS代码:

css 复制代码
.App {
  font-family: sans-serif;
  text-align: center;
}

.turntable-container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  background-color: #f0f0f0;
}

.turntable {
  width: 300px;
  height: 300px;
  border-radius: 50%;
  position: relative;
  overflow: hidden;
  animation: rotate calc(2s / var(--animation-speed)) linear infinite; /* 初始2秒一圈 */

  border: 10px solid #f8d38d;
  /* 使用圆锥渐变:每 45度 切换一个颜色,实现 8等分 */
  background: conic-gradient(
    #ff6b6b 0deg 45deg,
    #4ecdc4 45deg 90deg,
    #ff6b6b 90deg 135deg,
    #4ecdc4 135deg 180deg,
    #ff6b6b 180deg 225deg,
    #4ecdc4 225deg 270deg,
    #ff6b6b 270deg 315deg,
    #4ecdc4 315deg 360deg
  );
  box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
}

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

示例js代码:

javascript 复制代码
import { useEffect, useState } from "react";
import "./styles.css";

export default function App() {
  const [animationSpeed, setAnimationSpeed] = useState(1);

  useEffect(() => {
    // 开启2倍速播放
    setAnimationSpeed(2);
  }, []);

  return (
    <div className="App">
      <div class="turntable-container">
        <div
          class="turntable"
          style={{ "--animation-speed": animationSpeed }}
        ></div>
      </div>
    </div>
  );
}

效果演示

正常倍速:

正常倍速大转盘

2倍速:

2倍速播放大转盘

小结

综上,我们使用CSS圆锥渐变实现了一个简易大转盘,并使其按照2秒1圈的速度匀速转动。js中维护了animationSpeed状态代表倍速,初始值为1。通过将其设置为2实现2倍速播放。实战中,我们需要对希望支持倍速播放的动画的每一部分的动画持续时间都做CSS变量的插值,防止出现时间轴错乱的情况。

相关推荐
锋行天下2 小时前
DeepSeek写Langgraph就是个大傻逼,一本正经胡说八道
前端·人工智能·后端
jktantan2 小时前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript
计算机魔术师2 小时前
Anthropic官方插件被「寄生」,背后是同一类攻击又来了
前端
我命由我123453 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理
key_3_feng3 小时前
评估与对齐:Agent 自我进化的护栏
前端·数据库·agent
LaughingZhu4 小时前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion
Lank_M4 小时前
抠图结果缩放后边缘发脏,该怪的不是插值
前端
jerrywus4 小时前
Skill、MCP、Workflow、Rules、Memory 有什么区别?拿几次真实开发任务讲清楚
前端·agent·claude
补码缩写4 小时前
canvas 与 sharp 缩放透明图:默认预乘,非预乘得拆通道
前端
静默回滚4 小时前
抠图 PNG 缩小再放大,边缘又糊又白是两件事
前端