评论

微信小程序 scroll-view 橡皮筋回弹效果解决方案

微信小程序 scroll-view 橡皮筋回弹效果解决方案,历经3个小时终于确定问题产生的原因

花了 3 个小时,才找到 scroll-view 禁用回弹效果失效的问题

一般情况下,我们只需要根据官方案例设置就没有问题,如下:

<scroll-view class="scroll-view" scroll-y enhanced="{{ true }}" bounces="{{ false }}">
	<view wx:for="{{arr}}" wx:key="*this">{{item}}</view>
</scroll-view>

page({
	data: {
    	arr: [1,2,3,4]
    }
})

但是,正经人谁是一般人

我们使用 scroll-view 大部分都是动态数据,都是由接口动态返回,这时候如果像下面这样写,禁用回弹效果就会失效

<scroll-view
	class="scroll-view"
    scroll-y enhanced="{{ true }}"
    bounces="{{ false }}"
 >
	<view wx:for="{{arr}}" wx:key="*this">{{item}}</view>
</scroll-view>
page({
	data: {
    	arr: []
    }
},
onLoad(){
	setTimeout(()=>{
    		this.setData({
       			arr: [1,2,3,4,5]
            })
	},3000)
})

猜测这个可能是 scroll-view 初始化的原因,判断 arr 里面有值,来设置初始化,而当数据动态回填的时候没有做监听来重新初始化,

所以需要改成下面这两种写法即可

第一种:arr 有值并动态返回重新覆盖

<scroll-view
	class="scroll-view"
    scroll-y enhanced="{{ true }}"
    bounces="{{ false }}"
 >
	<view wx:for="{{arr}}" wx:key="*this">{{item}}</view>
</scroll-view>
page({
	data: {
    	arr: [1,2,3]
    }
},
onLoad(){
	setTimeout(()=>{
    		this.setData({
       			arr: [1,2,3,4,5]
            })
	},3000)
})

第二种:arr 没有值 添加 if 判断显示隐藏

第一种判断:wx:if="arr.length"
<scroll-view
	class="scroll-view"
    scroll-y enhanced="{{ true }}"
    bounces="{{ false }}"
    wx:if="arr.length"
 >
	<view wx:for="{{arr}}" wx:key="*this">{{item}}</view>
</scroll-view>
page({
	data: {
    	arr: []
    }
},
onLoad(){
	setTimeout(()=>{
    		this.setData({
       			arr: [1,2,3,4,5]
            })
	},3000)
})
第二种判断:wx:if="isShowScrollView"
<scroll-view
	class="scroll-view"
    scroll-y enhanced="{{ true }}"
    bounces="{{ false }}"
    wx:if="isShowScrollView"
 >
	<view wx:for="{{arr}}" wx:key="*this">{{item}}</view>
</scroll-view>
page({
	data: {
    	arr: [],
        isShowScrollView: false
    }
},
onLoad(){
	setTimeout(()=>{
    		this.setData({
       			arr: [1,2,3,4,5],
                isShowScrollView: false
            })
            /**
            * 也可以这样防止万一
            * setTimeout(()=>{
            * 	this.setData({
            * 		isShowScrollView: true
            * 	})
            * },50)
            */
	},3000)
})
最后一次编辑于  01-18  
点赞 0
收藏
评论

3 个评论

  • 黄思程
    黄思程
    01-18

    也可以用 skyline 的 scroll-view 轻松实现

    01-18
    赞同 1
    回复
  • 徐达
    徐达
    08-16

    加精,千真万确有效,差点搞死我

    08-16
    赞同
    回复
  • 阿白
    阿白
    01-18

    不要吝啬你的赞,快给我点点

    01-18
    赞同
    回复
登录 后发表内容