像鬼畜一下,频繁抖动。
后来发现,当添加enhanced
属性时,(2024年6月26日发现官方文档去掉了这个属性), scroll-view
的顶部上面没有元素时(也就是wxm
里第一个元素就是scroll-view
),下拉时会触发顶部回弹效果,导致频繁抖动。
- 所以 要么不要添加
enhanced
这个属性(估计官方就是发现这个有兼容性问题才去掉了)
- 要么 设置
margin-top
属性,不要让scroll-view
紧挨着顶部
结果:抖动的现象不必现了,但是某些情况下还是会有抖动的情况!家人们,所以最终还是弃用scroll-view
了,改为页面级的滚动效果,onReachBottom
、onPullDownRefresh
、wx.pageScrollTo
等事件实现功能.
方案1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <view> <scroll-view style="padding-top:{{menuBtnHe}}px" class="main-content-area" scroll-y show-scrollbar="{{false}}" refresher-enabled refresher-default-style="none" refresher-background="transparent" refresher-triggered="{{triggered}}" bindscrolltolower="lower" bindrefresherrefresh="onRefresh" scroll-top="{{mainScroll}}" scroll-with-animation="{{animationFlag}}" refresher-threshold="100" enable-passive="{{true}}" bindscroll="viewScroll"> 瀑布流区域 </scroll-view> </view>
|
方案2:(注意enhanced
的区别,但是这种情况下,scroll-view
的高度就要动态计算,减去margin-top的距离,不然底部的部分内容会被遮挡)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <view> <scroll-view enhanced style="margin-top:{{menuBtnHe}}px" class="main-content-area" scroll-y show-scrollbar="{{false}}" refresher-enabled refresher-default-style="none" refresher-background="transparent" refresher-triggered="{{triggered}}" bindscrolltolower="lower" bindrefresherrefresh="onRefresh" scroll-top="{{mainScroll}}" scroll-with-animation="{{animationFlag}}" refresher-threshold="100" enable-passive="{{true}}" bindscroll="viewScroll"> 瀑布流区域 </scroll-view> </view>
|
- 解决方案: 设置
scroll-with-animation
为true
因为切换tab的时候不想要动画效果,所以置顶后再取消重制为false
1 2 3 4 5
| <scroll-view scroll-with-animation="{{animationFlag}}"> 瀑布流区域 </scroll-view>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| backTop: throttle(function() { this.setData({ animationFlag: true }, () => { this.setData({ showCityTabFix: false, mainScroll: 0, animationFlag: false }) }) this.setTracer({ action: 'bactToTop_click', label: '回到顶部_点击', }) }, 500, { leading: true, trailing: false }),
|
当tab-list
元素fix
吸顶状态时,如何保持一直吸顶状态,下面的列表数据显示第一个元素。
- 切换tab,获取数据后,执行
wx.pageScrollTo
滚动到指定位置。
- 注意
scrollTop
的临界值要">="
,不然吸顶状态下,切换tab, wx.pageScrollTo
的时候,tab-list
不会吸顶。
- 注意,下面的瀑布流列表数据也要给足够的高度,
tab-list
不然也不会吸顶。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| tabActive(e) { const {tabId, tabName} = e.detail.currentTarget.dataset.item if (this.data.selectTab == tabId) {return} this.setData({ hasMore: true, current: 1, size: 10, initData: [], selectTab: tabId, selectTabName: tabName, }, () => { this.getArticleListByTab() }) },
setDataSuccess() { if ((this.data.current == 2) && this.data.showCityTabFix) { wx.pageScrollTo({ scrollTop: this.data.fixHe, duration: 0, }) } },
onPageScroll(res) { let scrollTop = res?.scrollTop ? parseInt(res.scrollTop) : 0; this.setData({ showCityTabFix: scrollTop >= this.data.fixHe, }) },
|
1 2 3 4 5 6
| .list-area { width: 100vw; min-height: 80vh; background: #FFFFFF; padding-bottom: 80rpx; }
|
wx.request设置超时 无网状态下不生效 只有弱网状态下才能生效