You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Webkit/Chrome中用JavaScript放慢全局时间与渲染以录制平滑动画

全局放慢浏览器动画的实现方案

1 全量JS时间劫持方案

之前的Proxy方案未生效通常是没有覆盖所有时间相关的调度API,你需要在页面所有脚本加载前注入以下代码,即可将所有JS驱动的动画(包括anime.js等第三方库生成的动效)速度降至原有的10%:

const TIME_SCALE = 0.1; // 时间流逝速度为正常的10%,即总耗时为原来的10倍

// 劫持Date时间
const NativeDate = Date;
Date = class extends NativeDate {
  static now() {
    return NativeDate.now() * TIME_SCALE;
  }
  constructor(...args) {
    super(args.length ? ...args : NativeDate.now() * TIME_SCALE);
  }
};

// 劫持定时器
const nativeSetTimeout = window.setTimeout;
const nativeSetInterval = window.setInterval;
window.setTimeout = (cb, delay = 0, ...args) => nativeSetTimeout(cb, delay / TIME_SCALE, ...args);
window.setInterval = (cb, delay = 0, ...args) => nativeSetInterval(cb, delay / TIME_SCALE, ...args);

// 劫持帧动画调度
const nativeRAF = window.requestAnimationFrame;
const nativeCancelRAF = window.cancelAnimationFrame;
const rafMap = new Map();
window.requestAnimationFrame = (cb) => {
  const wrapped = (ts) => cb(ts * TIME_SCALE);
  const id = nativeRAF(wrapped);
  rafMap.set(id, wrapped);
  return id;
};
window.cancelAnimationFrame = (id) => {
  nativeCancelRAF(id);
  rafMap.delete(id);
};

2 CSS动画/过渡全局减速

CSS动画不受JS时间劫持影响,可通过JS批量修改元素的动画参数实现10倍减速:

document.querySelectorAll('*').forEach(el => {
  const computedStyle = getComputedStyle(el);
  // 处理animation时长与延迟
  const animationDuration = parseFloat(computedStyle.animationDuration);
  const animationDelay = parseFloat(computedStyle.animationDelay);
  if (animationDuration) el.style.animationDuration = `${animationDuration * 10}s`;
  if (animationDelay) el.style.animationDelay = `${animationDelay * 10}s`;
  // 处理transition时长与延迟
  const transitionDuration = parseFloat(computedStyle.transitionDuration);
  const transitionDelay = parseFloat(computedStyle.transitionDelay);
  if (transitionDuration) el.style.transitionDuration = `${transitionDuration * 10}s`;
  if (transitionDelay) el.style.transitionDelay = `${transitionDelay * 10}s`;
});

3 无代码实现方案(仅本地调试/录制适用)

如果是本地录制场景,无需修改任何代码,直接使用Chrome内置的调试工具即可实现全局调速:

  • 打开Chrome开发者工具(F12)
  • 点击右上角三点菜单,选择「更多工具」→「动画」
  • 拖动动画面板顶部的速度滑块至10%,即可同时全局控制所有JS、CSS动画的播放速度

内容的提问来源于stack exchange,提问作者Skinkie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:36:02