背景
在项目中遇到一个轮播列表,效果如下
思路
复制一组数据拼接到数组后面,每次截取固定长度的数组,更新dom节点,使用CSS Animation修补过渡效果
实现
方式一
用 CSS 让容器内的数据的 transitions 值不断减小(负数),同时 JS 利用 setInterval 在恰好的时间节点动态地更替数据。setInterval定时器的时间不精确。js 和 css定时器时间会有差异。
方式二
动画部分使用 CSS Animation动画无限滚动,js部分使用API:IntersectionObserver(教程)
在对一个 Dom 进行 observe 后,便能及时得知其可见状态的改变,进行数据更替操作
而因为交叉观察器只会在元素的可见状态改变时触发 callback。这个效果没达到翻屏顿感。
方式三
使用js是css的动画效果,让其在 window.requestAnimationFrame 中按照一定频率增加对应元素的 transitions值不断减小(负数),并在其值增加到一定节点时操作数据。教程
代码示例
具体代码见:Github