用 requestAnimationFrame 驱动 Canvas 动画时,组件隐藏或卸载要取消什么避免幽灵绘制?
围绕“用 requestAnimationFrame 驱动 Canvas 动画时,组件隐藏或卸载要取消什么避免幽灵绘制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确句柄保存、标签页可见性与最后一帧状态提交。
浏览器 · 动画面试题第 1 页,显示第 1–11 题,共找到 11 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“用 requestAnimationFrame 驱动 Canvas 动画时,组件隐藏或卸载要取消什么避免幽灵绘制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确句柄保存、标签页可见性与最后一帧状态提交。
本文解释 Canvas 高 DPR 屏幕模糊的机制:CSS 像素与位图像素分离;给出标准设置方法,强调 ctx.setTransform 复位避免变换叠加,并讨论 resize 与动画中的边界。
围绕“display:none、visibility:hidden、opacity:0 三种隐藏方式在布局、绘制、命中测试”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须逐维度对比是否占布局空间、是否参与绘制、是否响应事件、过渡动画可用性。
围绕“requestAnimationFrame 的回调相对一次渲染更新的布局、绘制步骤在什么时候执行,为什么适合在里面读”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须定位回调发生在样式与布局计算之前、与浏览器刷新率对齐,并解释同帧内读写不会丢中间帧。
围绕“为什么用 transform 和 opacity 做动画通常比修改 top/left 或 width 更流畅”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须落到三类属性分别触发布局、绘制、仅合成的流水线差异上。
围绕“View Transitions API 在 DOM 更新前后分别做了什么,为什么它能让状态切换变成平滑动画而不手写”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明浏览器捕获新旧状态快照、在回调内同步完成 DOM 更新、对两层快照做交叉过渡的机制。
围绕“基于 visibilitychange 事件,哪些类型的页面任务应该在页面隐藏时暂停或降级,为什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出暂停视频/动画、停止轮询、保存草稿等具体决策及对应资源理由,并说明 hidden 时 rAF 与定时器本就被节流。
本题解释 DedicatedWorkerGlobalScope 与 window 的关键差异:self 指向该作用域而非 window,postMessage 专门向父线程通信,close 终止 Worker。同时提及 DOM 缺失、requestAnimationFrame 可用等边界。
围绕“Worker 中支持 setTimeout 和 setInterval 吗?它们与主线程有何异同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕同样支持,但不涉及 requestAnimationFrame。
本文解释如何用 preventDefault 阻止滚轮引起的页面滚动,同时保留自定义行为;重点说明 passive 选项的影响、滚动动画管理、负滚动链及 wheel 事件可取消性的注意事项。
围绕“scroll 事件触发非常频繁,如何有效地控制处理频率?请对比 rAF、timeout 和 passive 的配合”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较 rAF 与防抖节流在滚动中的差异,以及 passive 保证不被阻塞。