scroll()
scroll()
CSS 函数 可与 animation-timeline
一起使用,以指示一个可滚动元素(滚动器)和滚动条轴,该滚动条轴将为当前元素的动画提供一个匿名的滚动进度时间线。通过在顶部和底部(或左侧和右侧)之间滚动滚动器来推进滚动进度时间线。滚动范围内的位置转换为进度百分比——开始时为 0%,结束时为 100%。
注意:如果指示的轴不包含滚动条,则动画时间线将处于非活动状态(进度为零)。
注意:每个 scroll()
的使用对应于 ScrollTimeline
在 Web 动画 API 中的自身唯一实例。
语法
/* Function with no parameters set */
animation-timeline: scroll();
/* Values for selecting the scroller element */
animation-timeline: scroll(nearest); /* Default */
animation-timeline: scroll(root);
animation-timeline: scroll(self);
/* Values for selecting the axis */
animation-timeline: scroll(block); /* Default */
animation-timeline: scroll(inline);
animation-timeline: scroll(y);
animation-timeline: scroll(x);
/* Examples that specify scroller and axis */
animation-timeline: scroll(block nearest); /* Default */
animation-timeline: scroll(inline root);
animation-timeline: scroll(x self);
参数
正式语法
示例
设置匿名滚动进度时间线
在此示例中,#square
元素使用匿名滚动进度时间线进行动画处理,该时间线使用 scroll()
函数应用于要进行动画处理的元素。在此特定示例中,时间线由最近的父元素提供,该父元素具有(任何)滚动条,来自块方向的滚动条。
HTML
下面显示了示例的 HTML。
<div id="container">
<div id="square"></div>
<div id="stretcher"></div>
</div>
CSS
下面的 CSS 定义了一个正方形,根据由 animation-timeline
属性提供的动画时间轴,以交替的方向旋转。在本例中,时间轴由 scroll(block nearest)
提供,这意味着它将选择最近具有滚动条的祖先元素的块方向上的滚动条;在本例中,是“container”元素的垂直滚动条。
注意:block
和 nearest
实际上是默认参数值,因此我们也可以只使用 scroll()
。
#square {
background-color: deeppink;
width: 100px;
height: 100px;
margin-top: 100px;
position: absolute;
bottom: 0;
animation-name: rotateAnimation;
animation-duration: 1ms; /* Firefox requires this to apply the animation */
animation-direction: alternate;
animation-timeline: scroll(block nearest);
}
@keyframes rotateAnimation {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
容器的 CSS 将其高度设置为 300px,并且我们还设置容器在溢出时创建垂直滚动条。“stretcher” CSS 将块高度设置为 600px,这会强制容器元素溢出。这两者共同确保容器具有垂直滚动条,这使其可以作为匿名滚动进度时间轴的来源。
#container {
height: 300px;
overflow-y: scroll;
position: relative;
}
#stretcher {
height: 600px;
}
结果
滚动查看正方形元素的动画效果。
规范
规范 |
---|
滚动驱动的动画 # 滚动表示法 |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。