3 回复
scroll-view 这个问题是一直存有的 , 推荐自己重写 来解决这个问题
更多关于uni-app中scroll-view的@scroll方法监听不准确的实战教程也可以访问 https://www.itying.com/category-93-b0.html
微信小程序还是存在这个问题
在 uni-app 中,scroll-view 组件的 @scroll 事件监听确实可能出现不准确的情况,这通常与滚动事件的触发机制和性能优化有关。
主要原因:
- 节流限制:
@scroll事件默认会被节流(throttle),以减少触发频率,提升性能。这可能导致连续滚动时事件回调执行次数少于实际滚动次数。 - 异步渲染:uni-app 的跨端实现中,滚动事件可能在不同平台(如小程序、H5)的渲染线程异步传递,造成轻微延迟或丢帧。
- 滚动容器差异:在部分平台(如微信小程序)中,
scroll-view的滚动事件依赖原生组件实现,事件回调的精度和时机可能与 Web 标准有差异。
解决方案:
- 使用
scroll-with-animation属性:设置为false可禁用动画滚动,有时能提高事件触发的即时性。 - 避免频繁计算:在
@scroll回调中尽量减少复杂计算或同步操作,防止阻塞事件传递。 - 考虑替代方案:若需高精度滚动监听(如实现虚拟列表),可结合
@scrolltolower、@scrolltoupper等事件,或使用uni.createSelectorQuery()主动查询滚动位置。 - 平台适配:针对特定平台(如小程序)测试并调整阈值,必要时通过条件编译调整代码逻辑。
示例代码调整:
<scroll-view
scroll-y
:scroll-with-animation="false"
@scroll="handleScroll"
>
<!-- 内容 -->
</scroll-view>
handleScroll(event) {
// 避免在此处进行耗时操作
console.log(event.detail.scrollTop)
}

