https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html
我有一个A页面,第一次打开时渲染一个包含两条轮播文案的swiper组件,设置自动轮播,轮播正常。
当我切换到其他页面之后再回到A页面,由于业务原因,此时需要再次请求轮播数据进行setData,这时swiper组件相当于使用新的setData数据(尽管新旧数据一样)重新渲染了,于是这两条轮播的文案就出现了两个问题:
一是第一条文案滚过去之后出现一条空白,
二是这条空白滚过去之后出现一瞬间两条文案重叠,然后迅速的变成了第一条文案,
也就是说我只能看到第一条文案和一条空白交替轮播(疑似第二条文案定位有问题)
这种情况是swiper组件可能存在的bug吗?还是说我哪里用错了?😭
补充:我把这个容器高度放大了看出问题的效果,发现两条文案是每次同时出现的(正常情况应该是每次在顶部只出现一条)
补充:经测试发现是由于我使用了后端下发的字段给swiper文案设置颜色导致的这个问题,如果把颜色写死就没有这个bug。所以应该是<swiper-item>设置动态样式会引起问题。
解决方案:在<swiper-item>内部嵌套一层<text>,然后给<text>设置样式就可以了
代码片段
<swiper class="text-swiper" autoplay interval="3000" duration="300" circular vertical easing-function="easeOutCubic" wx:if="{{rollingTexts && rollingTexts.length}}" bindchange="handleChange">
<swiper-item wx:for="{{rollingTexts}}" wx:key="index">
{{item}}
</swiper-item>
</swiper>
// 在每次页面onShow的时候都需要请求API,用返回值setData
setData({
rollingTexts: ['11111111', '22222222']
})
<swiper class="text-swiper" autoplay interval="3000" duration="300" circular vertical easing-function="easeOutCubic" wx:if="{{rollingTexts && rollingTexts.length}}" bindchange="handleChange">
<swiper-item wx:for="{{rollingTexts}}" wx:key="index" style="color:{{mockColor}}">
{{item}}
</swiper-item>
</swiper>