评论

swiper组件在当前swiper-item前插入新的swiper-item会闪烁,怎样才能保持丝滑效果?

避免闪烁的思路是要在animationfinish事件结束后才处理。而且要先把duration置零,处理完之后再复位。

使用swiper时如果item太多会很卡,所以通常只加载小部分数据,待用户前后划到头时再加载更多。

一般是向前滑到头(current为0)时,加载更多的前置item使可以继续向前。(向后划类似)

添加前置item同时要减小current以保持当前显示不变,但直接setData会导致界面闪烁。

(加载后置的item不会闪烁;但,若删除前置的item也会闪烁,处理方法类似)

避免闪烁的思路是要在animationfinish事件结束后才处理。而且要先把duration置零,处理完之后再复位。

uni-app代码示例如下:

<template>
  ...
  <swiper: current="current" :duration="duration" @change="showChange" @animationfinish="showFinish">
    <swiper-item v-for="(item,index) in items" :key="item.id">
      <view>{{item.content}}</view>
    </swiper-item>
  </swiper>
  ...
</template>

<script>
export default {
    data() {
        return {
            items: [],
            current: 0,
            duration: 500,
        }
    },
    methods: {
        showChange(e){
            this.current = e.detail.current
        },
        showFinish(e){
            if (this.current < 1){//前面没了
                let item = getLeftItem()//尝试获取前一个item
                if (item){
                    setTimeout(() => {
                        this.duration = 0
                        this.items.unshift(item);
                        this.current = 1
                        this.duration = 500
                    }, 1)
                }
            }
        },
    },
}
</script>



最后一次编辑于  12-07  
点赞 1
收藏
评论
登录 后发表内容