微信小程序swiper闪烁抖动卡死问题
微信官方文档有注释
change事件 source 返回值
从 1.4.0 开始,change事件增加 source字段,表示导致变更的原因,可能值如下:
autoplay 自动播放导致swiper变化;
touch 用户划动引起swiper变化;
其它原因将用空字符串表示。
tip: 如果在 bindchange 的事件回调函数中使用 setData 改变 current 值,则有可能导致 setData 被不停地调用,因而通常情况下请在改变 current 值前检测 source 字段来判断是否是由于用户触摸引起。
tip: 在 mac 小程序上,若当前组件所在的页面或全局开启了 enablePassiveEvent 配置项,该内置组件可能会出现非预期表现(详情参考 enablePassiveEvent 文档)
<swiper bindchange="swiperBindChange" current='{{selectedTitle}}' duration="200" style="height:{{swiperHeight}}rpx">
<block wx:for="{{dataList}}" wx:key="index">
<swiper-item id="current_{{index}}">
</swiper-item>
</block>
</swiper>
swiperBindChange: function (any) {
console.log(any);
let that = this;
let source = any.detail.source;
//根据官方 source 来进行判断swiper的change事件是通过什么来触发的,autoplay是自动轮播。touch是用户手动滑动。其他的就是未知问题。抖动问题主要由于未知问题引起的,所以做了限制,只有在自动轮播和用户主动触发才去改变current值,达到规避了抖动bug
if (source == "autoplay" || source == "touch") {
}
}