高刷屏动画流畅度优化关键在渲染机制而非媒体查询;需用transform/opacity、will-change触发GPU合成,禁用left/top等触发布局属性,并通过requestAnimationFrame匹配设备刷新率。

媒体查询本身不控制动画帧率,它只响应屏幕尺寸、宽高比、横竖屏等静态特征。高刷屏(如 90Hz、120Hz)的动画流畅度优化,关键不在 @media 规则里写断点,而在于让 CSS 动画或 JS 动画能真正跑满设备原生刷新率。
要让 H5 在高刷屏上动画更顺滑,需从渲染机制和资源调度入手:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
-
启用
will-change: transform或opacity
对频繁动画的元素提前告知浏览器将要变化的属性,触发图层提升,减少重排重绘。例如:.animated-element { will-change: transform; } 用
transform和opacity做动画,避开left/top/width/height
后者会强制触发 Layout → Paint → Composite 全流程;前者仅走 Composite 阶段,在高刷屏上更容易维持高帧率。-
CSS 动画优先用
prefers-reduced-motion做兜底,但不降帧率
这个媒体查询用于尊重用户“减少动态效果”的偏好,不是为性能妥协。它不影响帧率,只影响动效复杂度:@media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; } } -
JS 动画务必用
requestAnimationFrame,且避免在回调中做耗时计算
高刷屏下rAF会按设备实际刷新率(如 120fps)触发,但若一帧内执行太久,就会掉帧。建议:- 把复杂逻辑拆到 Web Worker
- 使用
performance.now()监控单帧耗时(目标 ≤ 8.3ms @120Hz) - 动画状态用
CSS.supports('animation-timeline: scroll')等新特性前,先检测支持度再启用
注意 iOS Safari 的特殊限制
即使是 120Hz 的 iPhone 15 Pro,在非全屏 WebApp 模式下,WebView 默认仍被锁定在 60Hz 渲染——这是系统级限制,无法通过 CSS 或 JS 绕过。唯一缓解方式是引导用户“添加到主屏幕”后以 PWA 模式运行,部分机型可解锁更高帧率渲染通路。
高刷适配不是加几条 @media (min-resolution: 2dppx) 就能解决的,它本质是渲染路径的精细化治理。










