滚动驱动动画为何在视口75%处就结束?检查 animation-range-end 属性
通过设置 animation-range-end 属性可以精确控制动画在时间轴上的结束位置,从而让动画在视口75%处提前完成。
检查动画结束点是否被提前设定
在滚动驱动动画中,动画的结束点默认由时间轴决定。如果动画在视口75%处就结束了,说明动画范围被缩短了。这通常是因为在样式中设置了 animation-range-end 属性,将动画的结束范围设定在了时间轴的特定位置。检查代码中是否定义了 animation-range-end,以及其具体的值是什么。
MDN 文档指出,animation-range-end 属性用于设置动画在时间轴上结束的点。如果该属性被设置为 exit 25%,意味着动画将在视口进度达到75%时结束。这是因为 exit 代表视口结束位置,25% 表示从该位置向前回退25%。这种设置会改变动画的有效持续时间,使其在元素到达视口底部之前就完成播放。
确认命名时间轴范围与数值的配合
除了使用 normal 或长度百分比,animation-range-end 还支持命名时间轴范围。例如,可以使用 cover 或 contain 等关键字。当使用命名范围时,可以进一步指定从该范围起点开始的长度或百分比。如果只指定了命名范围而没有附带长度百分比,默认值是100%,即从该范围的起点结束。
在示例代码中,animation-range-end: exit 25% 表示动画在视口进度达到75%时结束。exit 是一个命名的时间轴范围,25% 是从该范围起点(即视口底部)开始计算的偏移量。这种写法明确告诉浏览器,动画的结束点位于视口底部向上25%的位置。如果需要动画在视口完全进入时结束,应将值设置为 normal 或 cover。
排查简写属性是否重置了结束点设置
animation-range-end 是一个重置属性,这意味着它不能通过 animation 简写属性来设置。如果在样式中使用了 animation 简写属性,而没有显式声明 animation-range-end,那么该属性会被重置为 normal。这会导致动画在时间轴的默认位置结束,而不是预期的位置。
MDN 文档强调,animation-range-end 被包含在 animation 简写属性中,作为重置值。因此,在创建滚动驱动动画时,必须先声明 animation 简写属性,然后再声明 animation-range-end,以避免被重置。如果动画在视口75%处结束,可能是因为简写属性覆盖了之前设置的结束点,或者根本没有设置结束点,导致使用了默认值。
验证动画填充模式对结束状态的影响
动画填充模式(animation-fill-mode)决定了动画在播放前后元素的状态。如果设置了 animation-fill-mode: forwards,动画结束后元素将保持最后一帧的状态。如果未设置填充模式,动画结束后元素将恢复到初始状态。在检查动画结束位置时,需要考虑填充模式对最终视觉效果的影响。
在示例中,当复选框被选中时,应用了 animation-fill-mode: forwards。这使得动画在75%处结束后,元素保持最后一帧的背景色和透明度。如果未选中复选框,动画结束后元素将恢复到初始的背景色和透明度。因此,在验证动画结束位置时,需要同时检查填充模式的设置,以确定元素在动画结束后是否保持最终状态。
资料与延伸阅读
你可以通过以下原始资料核对文中概念,并继续深入阅读。