移动体验 / 方法解读

移动端滚动驱动动画如何从断点开始播放

使用 animation-range-start 属性可以精确控制滚动驱动动画的起始时间点,让元素在进入视口前就开始变化。

展示CSS代码编辑器界面,包含scroll-driven animations相关代码片段
主题资料配图,非新闻现场照片 · 配图:css scroll-driven animations 详解

设置负值让动画提前开始

当使用 scroll() 函数定义滚动进度时间轴时,默认动画从元素进入视口时开始。若希望元素在未进入视口前就呈现部分状态,可设置负值。例如设置 animation-range-start: -25%,动画将从时间轴的 -25% 处开始播放。这意味着元素在进入视口前就已经完成了 25% 的动画进度,从而实现平滑的过渡效果。

在 CSS 中,该属性允许指定长度或百分比值。负值表示从时间轴起点之前开始计算。配合 animation-timeline: scroll() 使用时,负值能让动画在元素尚未完全进入滚动视口时就开始执行。这常用于实现元素淡入或缩放效果,使其在用户滚动到附近时已经处于可见状态,提升视觉连贯性。

使用命名时间轴范围控制起始点

除了使用负值,还可以利用命名的时间轴范围来指定动画的起始点。语法格式为 <timeline-range-name> <length-percentage>。例如设置 animation-range-start: cover 20%,动画将从名为 'cover' 的范围起点开始,并从该起点偏移 20%。如果未指定偏移量,默认从 0% 开始。

命名范围通常与滚动视口的特定区域相关。例如 'cover' 可能指代视口完全覆盖元素的范围。通过指定该范围后的偏移量,可以精确控制动画在特定滚动位置的触发时机。这种方法比单纯使用负值更灵活,能够针对不同的滚动区域定制动画行为。

避免使用简写属性重置设置

在编写 CSS 时,需要注意 animation-range-start 是一个重置属性。如果同时使用了 animation 简写属性,简写会覆盖之前声明的 animation-range-start 值,将其重置为 normal。因此,在声明 animation 简写后,必须再次声明 animation-range-start,以确保自定义的起始点设置生效。

正确的顺序是先声明 animation 简写,再声明 animation-range-start。这样可以避免简写属性将自定义的起始点重置为默认值。确保在滚动驱动动画的配置中,按照正确的顺序编写 CSS,以维持预期的动画行为。

验证动画起始点是否生效

验证动画起始点是否生效,可以通过检查元素在滚动过程中的初始状态。如果设置了负值或命名范围,元素在进入视口前应已呈现部分动画效果。例如,元素在滚动到视口上方时,背景色或透明度应已发生变化。如果元素在进入视口时才突然变化,说明起始点设置可能未生效。

此外,可以使用浏览器开发者工具检查计算后的样式。确认 animation-range-start 的值是否为预期的设置。如果值显示为 normal,则说明可能被简写属性覆盖,或浏览器不支持该属性。确保在支持的浏览器中测试,以验证设置的正确性。

资料与延伸阅读

你可以通过以下原始资料核对文中概念,并继续深入阅读。

  1. animation-range-start CSS property - CSS | MDN ↗
  2. 配图:css scroll-driven animations 详解 ↗
← 更多移动体验文章返回顶部 ↑