在开发小程序时,我们经常会用到swiper组件实现轮播或者翻页效果,但是当swiper-item数量过多时,会造成视图层渲染卡顿的问题。
有网友推荐的做法是只渲染三个swiper-item,分别是本条数据以及上一条和下一条,默认当前显示的swiper-item位置是中间那个,然后根据滑动动态更改三条数据,并把current位置设置回中间那个swiper-item,也就是current:1, 但是这种做法会在setData({current:1})时有个往回滑动的动画效果,这里也有个简单粗暴的解决办法就是通过设置duration='0'直接关闭动画,但不管怎样做,体验都是相对较差的。
还有的网友的做法是先渲染n个空的swiper-item,n是当前数据的条数,然后只插入当前索引以及上下两条数据,并根据滑动动态修改对应位置的数据,这种做法比上一种更简单,优化了性能,也解决了翻页会有往回滑动动画的问题,但是当swiper-item量足够大时,比如1000条,渲染仍会非常卡顿。
个人认为最佳的解决办法是对第一种解决方案进行改进:
- 同样的是只在视图层渲染三个swiper-item,其它的数据存在数组中
- 在swiper组件中加入circular属性,使swiper可以衔接滑动
- 然后swiper中当前显示swiper-item的索引也是动态的,数据需要根据当前索引更新到对应位置,并不是直接将current固定在第二条,结合circular属性,就可以实现只渲染了三条swiper-item并且滑动无跳回,并解决了swiper数量过多导致渲染卡顿的问题。
现实的效果图:

本文探讨了在小程序中使用swiper组件时遇到的渲染卡顿问题,提出了一种优化策略:仅渲染三个swiper-item,结合circular属性实现无缝轮播。通过动态更新数据和索引,避免了滑动回弹动画,提高了性能。同时,文章提供了详细的代码示例来说明如何实现这一方案。

1万+

被折叠的 条评论
为什么被折叠?



