花了 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)
})
也可以用 skyline 的 scroll-view 轻松实现
加精,千真万确有效,差点搞死我
不要吝啬你的赞,快给我点点