//展示轮播图数据的swiper组件
<swiper class="swiper"
    //不要使用 bindchange="animationChange" 
    bindanimationfinish="animationChange" 
    autoplay="{{autoplay}}" 
    current="{{activeSlide}}">
<block wx:key="{{index}}" wx:for="{{slides}}">
<swiper-item class="swiper-item">
<image src="{{item.bannerUrl}}" data-url='{{item.bannerSkipUrl}}' class="{{index==activeSlide?'mid swiper-active':'mid swiper-image'}} slide-image" @tap='goLink' />
</swiper-item>
</block>
</swiper>

{
  data:{
    activeSlide:0,
    autoplay:true
  }
  method:{
    animationChange(e) {
      this.activeSlide = e.detail.current;
    },
  }
}

防止出现轮播图卡死现象,最好使用 bindanimationfinish 方法切换当前下标的图片

bindchange
EventHandle current 改变时会触发 change 事件,event.detail = {current: current, source: source}

bindanimationfinish
EventHandle 动画结束时会触发 animationfinish 事件,event.detail 同上

如果你添加autoplay自动播放会导致swiper变化,在手机上你可以测试一下,打开你做的小程序有轮播图的界面 然后切屏打开其他应用你会看到轮播图在疯狂的卡死。

因为autoplay与bindchange事件一起导致当前的current出现问题,所以采用动画结束时会触发 animationfinish 事件给current去赋值。

从 1.4.0 开始,change事件返回detail中包含一个source字段,表示导致变更的原因,可能值如下:

autoplay 自动播放导致swiper变化;
touch 用户划动引起swiper变化;
其他原因将用空字符串表示。

注意:其中只可放置<swiper-item/>组件,否则会导致未定义的行为。

作者 admin

百度广告效果展示