轮播列表requestAnimationFrame实现

229 阅读1分钟

背景

在项目中遇到一个轮播列表,效果如下

录制_2023_09_04_09_40_09_130.gif

录制_2023_09_04_09_40_54_36.gif

思路

复制一组数据拼接到数组后面,每次截取固定长度的数组,更新dom节点,使用CSS Animation修补过渡效果

实现

方式一

用 CSS 让容器内的数据的 transitions 值不断减小(负数),同时 JS 利用 setInterval 在恰好的时间节点动态地更替数据。setInterval定时器的时间不精确。js 和 css定时器时间会有差异。

方式二 动画部分使用 CSS Animation动画无限滚动,js部分使用API:IntersectionObserver教程) 在对一个 Dom 进行 observe 后,便能及时得知其可见状态的改变,进行数据更替操作
而因为交叉观察器只会在元素的可见状态改变时触发 callback。这个效果没达到翻屏顿感。

方式三

使用js是css的动画效果,让其在 window.requestAnimationFrame 中按照一定频率增加对应元素的 transitions值不断减小(负数),并在其值增加到一定节点时操作数据。教程

代码示例

具体代码见:Github