用截图基线比对(visual diff)作为 Agent 的操作确认手段时,动态内容导致的误报应如何收敛?
用截图基线比对(visual diff)作为 Agent 的操作确认手段时,动态内容导致的误报应如何收敛? 本文先给出可直接复述的结论,再用最小代码说明截图基线比对动态内容误报收敛的工作方式、判断依据、项目边界和常见误区。
动画专题面试题第 1 页,显示第 1–50 题,共找到 79 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
用截图基线比对(visual diff)作为 Agent 的操作确认手段时,动态内容导致的误报应如何收敛? 本文先给出可直接复述的结论,再用最小代码说明截图基线比对动态内容误报收敛的工作方式、判断依据、项目边界和常见误区。
当模型产出速度超过前端渲染能力时,流式管线中的背压问题如何缓解? 本文先给出可直接复述的结论,再用最小代码说明流式背压渲染跟不上如何缓解的工作方式、判断依据、项目边界和常见误区。
用 requestAnimationFrame 驱动 Canvas 动画时,组件隐藏或卸载要取消什么避免幽灵绘制? 本文先给出可直接复述的结论,再用最小代码说明Canvas requestAnimationFrame cancelAnimationFrame 清理的工作方式、判断依据、项目边界和常见误区。
Canvas 在高 DPR 屏幕上模糊时,应该怎样按 devicePixelRatio 设置尺寸与变换? 本文先给出可直接复述的结论,再用最小代码说明Canvas devicePixelRatio 模糊 高清屏的工作方式、判断依据、项目边界和常见误区。
display:none、visibility:hidden、opacity:0 三种隐藏方式在布局、绘制、命中测试和可访问性上各有什么差异? 本文先给出可直接复述的结论,再用最小代码说明display none visibility hidden opacity 0 区别的工作方式、判断依据、项目边界和常见误区。
requestAnimationFrame 的回调相对一次渲染更新的布局、绘制步骤在什么时候执行,为什么适合在里面读写 DOM? 本文先给出可直接复述的结论,再用最小代码说明requestAnimationFrame 回调时机 渲染帧的工作方式、判断依据、项目边界和常见误区。
为什么用 transform 和 opacity 做动画通常比修改 top/left 或 width 更流畅? 本文先给出可直接复述的结论,再用最小代码说明transform opacity 动画 合成线程 性能的工作方式、判断依据、项目边界和常见误区。
View Transitions API 在 DOM 更新前后分别做了什么,为什么它能让状态切换变成平滑动画而不手写关键帧? 本文先给出可直接复述的结论,再用最小代码说明View Transitions API startViewTransition 过渡动画的工作方式、判断依据、项目边界和常见误区。
基于 visibilitychange 事件,哪些类型的页面任务应该在页面隐藏时暂停或降级,为什么? 本文先给出可直接复述的结论,再用最小代码说明visibilitychange 暂停视频 轮询 草稿保存的工作方式、判断依据、项目边界和常见误区。
创建一个专用 Worker 时,它的全局作用域和主线程有什么不同? 本文先给出可直接复述的结论,再用最小代码说明DedicatedWorkerGlobalScope 全局作用域差异的工作方式、判断依据、项目边界和常见误区。
Worker 中支持 setTimeout 和 setInterval 吗?它们与主线程有何异同? 本文先给出可直接复述的结论,再用最小代码说明Worker setTimeout setInterval 支持的工作方式、判断依据、项目边界和常见误区。
未注册的 CSS 自定义属性按普通 token 序列处理,浏览器通常无法在两个值之间连续插值。用 @property 声明语法类型、继承规则和初始值后,颜色或长度变量才可参与平滑过渡;渐变背景是否跟着变化还取决于引用位置。
!important 影响声明在 CSS 级联中的优先级,但不能只和选择器权重相比。来源与层叠层先决定重要声明的竞争顺序,重要层的排序还会反转;内联样式、动画与过渡各有位置,排查覆盖失败时需逐层比较。
暂停动画后改动同名关键帧,不会自动重启动画,但当前进度处的计算结果可能立即变化。区分冻结时间与冻结画面、修改关键帧与更换动画名,并给出用浏览器开发工具观察位置跳变的方法。
animation-direction 控制关键帧的播放方向。reverse 每轮倒着播,alternate 奇偶轮交替方向。搞清四种取值和缓动曲线反转的关系,动画方向就不会搞反。
animationstart、animationiteration 与 animationend 分别对应动画开始、新一轮循环和正常结束。正延迟会推迟开始事件,循环动画每轮未必都触发结束事件;动画被取消时还要考虑 animationcancel,监听逻辑不能只等最后一帧。
animation-fill-mode: backwards 会让元素在正延迟期间采用起始关键帧样式,动画结束后回到原样;both 同时具备 backwards 与 forwards 的效果。负延迟、动画方向和实际第一帧会改变视觉结果,不能简单把它理解成“永远显示 0% 帧”。
animation-delay 只发生在第一轮开始前,循环之间不会自动空出间隔。需要周期性停顿时,可把动作集中在关键帧前半段,让后半段保持同一状态;若停顿时长需动态变化,则适合用脚本控制播放状态。
关键帧中的 from 与 to 分别对应 0% 和 100%,中间可用任意百分比指定状态;端点缺失时,浏览器会依据元素的基础样式补齐。多个同名 @keyframes 规则的覆盖与同规则里重复百分比的合并不同,动画结果要分开判断。
paused 把动画冻结在当前帧,随时可以恢复继续播。负 delay 让动画跳过开头一段直接从中间开始,跳过的部分不会再播。两者对动画的影响完全不同,一个是暂停,一个是快进。
用 animation-timeline 把动画和滚动位置绑在一起,滚到哪动画就播到哪。讲解 scroll() 和 view() 两种时间线的区别、写法,以及浏览器兼容和常见坑。
filter 模糊元素自身,backdrop-filter 模糊元素背后的内容。讲解毛玻璃效果的写法、背景为何要留出透明度、模糊范围与性能开销,以及旧浏览器不支持时的降级方案。
卡片翻转 180 度后背面会透出正面的镜像内容,backface-visibility: hidden 就是把背面藏起来。讲解 3D 卡片翻转的完整结构、父容器的 perspective 设置,以及常踩的坑。
3D 变换、will-change、固定定位等都会触发合成层提升。讲解合成层的原理、will-change 的正确用法和常见的滥用问题,以及怎么在 DevTools 里检查层数。
conic-gradient 沿圆心扫一圈画完,repeating-conic-gradient 自动重复填满 360 度。讲解用锥形渐变画饼图的写法、色块硬边技巧、与径向渐变的区别,以及常见的角度换算错误。
CSS 自定义属性在动画中频繁修改会触发样式重算和布局回流,导致掉帧。了解浏览器对自定义属性和原生属性的处理差异,掌握用 @property 注册后走合成层的优化方案。
给图片加 filter: grayscale() 后用 transition 平滑去色的写法很简单,但 filter 过渡每帧都要重新计算像素,图片大或数量多时容易掉帧。了解 will-change 提升合成层和限制作用域的优化手段。
filter 在 CSS 规范里是非继承属性,子元素不会自动获得父元素的 filter 值。但父元素的 filter 作用于整个渲染结果,子元素作为其中一部分自然受影响。搞清渲染时机和继承的区别,才能正确给子元素做豁免。
父元素设了 filter 后会创建新的层叠上下文,同时改变 fixed 定位子元素的包含块。子元素不再相对于视口定位,而是相对于带 filter 的父元素。了解哪些属性会产生同样的副作用,以及实际项目中的解决方案。
linear-gradient 的角度以元素正上方为 0deg,顺时针旋转。0deg 从下往上渐变,90deg 从左往右,180deg 从上往下。掌握角度和方向关键字的对应关系,能快速判断渐变走向。
线性渐变会在相邻色标之间插值;两个不同颜色的色标落在同一位置时,插值区间消失,颜色会出现硬边。条纹背景和进度条分段可以用这个特点实现,色标顺序、百分比位置和透明色叠加则决定边界是否如预期。
conic-gradient 能沿角度分出扇形,配合圆角可形成饼图;中心再遮一层圆或使用 mask 就得到圆环进度。数值变化可驱动色标位置,边缘锯齿、超出范围和可访问文本仍要处理。
关键帧中写入不可平滑插值的属性时,动画会按离散规则切换,而不是产生连续变化。display 与 visibility 的切换时机不完全一样;做淡出或退出效果时,通常需要把透明度动画与元素最终隐藏的时间点协调起来。
transform 中多个变换函数会按矩阵顺序组合;先写 rotate 再写 translate,与反过来写会得到不同轨迹。父子坐标系和变换原点还会影响视觉结果,排查“位移方向不对”时应先看函数次序。
渐变文字通常把 linear-gradient 作为背景,再用 background-clip: text 裁到字形内,并让文字填充透明。缺少其中一步可能只看到普通文字或整块背景;浏览器前缀、选中态和暗色模式还会影响最终可读性。
系统开启减少动态效果后,页面应减少大幅位移、闪烁或自动播放,必要的状态反馈仍可保留。prefers-reduced-motion 媒体查询可切换时长或替换动画形式;只把动画时长改成极短值,可能影响依赖动画结束事件的代码。
radial-gradient 可用 circle 或 ellipse 约束渐变形状,用 at 调整中心点,再用 closest-side、farthest-corner 等关键字决定终点。容器长宽变化会改变椭圆的观感;背景位置和渐变中心也不能当成同一个参数。
减少动态效果的偏好不只影响 CSS 动画,还涉及平滑滚动、脚本驱动的过渡和第三方动画库。CSS 可用媒体查询覆盖相关属性,JavaScript 可借助 matchMedia 读取并监听变化;设置切换后运行中的动画也应得到处理。
steps() 把连续时间切成离散跳变,常用于打字机效果和逐帧精灵图;它不会像 linear 那样在两帧之间平滑插值。步数、跳变发生在区间起点还是终点,以及文字宽度与字符数是否匹配,都会影响最后一帧。
CSS perspective 决定三维变换的透视强度:距离值越小,近大远小越明显;perspective-origin 则改变观察中心。父元素设置 perspective 与元素自身使用 perspective() 函数的作用范围不同,翻转卡片时还要检查背面可见性。
transform-origin 决定 rotate、scale 等变换围绕哪里进行,同样旋转角度,中心点与左上角作为原点会画出不同路径。百分比原点相对元素自身盒子计算,变换后的视觉位移还与元素尺寸有关。
父元素应用 transform 后会为固定定位后代建立新的包含块,position: fixed 子元素可能不再固定于视口,而是跟随父组件。需要视口级弹层时,可把元素通过 Portal 移出该祖先,或避免在祖先上施加变换。
transform-style: preserve-3d 让子元素保留在父元素的三维空间中,flat 则把它们压到父元素平面。翻牌与立方体效果需要检查父子两级的设置;某些会产生分组绘制的属性也可能迫使结果变平。
独立的 rotate、scale、translate 属性可分别过渡,并按固定次序与 transform 组合;它们不等同于随意调换 transform 函数顺序。迁移旧动画时要检查最终变换矩阵、级联覆盖和目标浏览器支持情况。
translate 百分比是相对元素自身的宽高,不是父元素。translateX 百分比参照自身宽度,translateY 参照自身高度。这个特性常用于不知道元素尺寸时的居中定位。
transitionend 会按实际完成过渡的属性分别触发,可用 propertyName 过滤需要等待的那一个。过渡被中途取消可能触发 transitioncancel 而没有 transitionend;时长为零、元素被移除或目标值未改变时,也不能盲等结束事件。
height 从 0 到 auto 通常缺少可直接插值的明确终点,展开面板需要选择替代策略。max-height 技巧会让时长随内容变化,Grid 行高方案依赖布局结构;支持 interpolate-size 的环境可直接处理固有尺寸,但仍要考虑兼容性。
过渡未完成就更换目标值,浏览器通常从当前插值状态转向新目标,反向过渡还可能采用缩短后的时长。按钮连续悬停或抽屉快速开合会暴露这一点;若看到状态跳动,应确认是过渡被打断还是动画被重新创建。
同一元素的透明度和位移可以分别指定过渡时长、缓动曲线和延迟,transition 简写里的逗号会形成多组属性设置。列表长度不一致时值会循环匹配;面板开合时应对照计算后的样式,确认每项声明落到了预期属性上。
对比 transition-property 取 all 与显式列出属性的实际差异:浏览器只为变化属性创建过渡,帧开销接近;真正区别在意外过渡触发、时长不可拆分和维护风险。