小程序滚动穿透,弹层滚动导致背景滚动的问题标准解决方案
发布于 4 年前 作者 gaoli 4293 次浏览 来自 分享

先上代码

https://developers.weixin.qq.com/s/uI82fqmD7mmY

需求场景描述

  • 页面有弹层,弹层有滚动
  • 要求弹层滚动时背景不滚动

解决办法

解决标准

  • 很多方法都是要改原来的页面(也就是触发弹层的背景页面),给原来的页面加样式等操作,不符合本次解决的标准
  • 本次解决的标准希望是在弹层中处理,把弹层当做一个业务无关的组件,不做关联依赖处理

小程序中的情景

模拟器(符合预期)

  • 在弹层的滚动区域只会触发弹层的滚动,不会触发背景页面的滚动

Android机(华为Mate30 5G, Android 10)

  • 在弹层区域能滚动的时候只触发弹层的滚动
  • 在弹层区域不能滚动的时候(比如滚到头或者滚到尾的时候)会触发背景页面的滚动

iOS机(iPhone X ,iOS 13.4.1)

  • 在弹层滚动条出现的时候正常,弹层滚动条不出现的时候滚动背景
  • 不但有背景的本身的滚动,还有弹性滚动

小程序中解决办法

在modal 最外层加catchtouchmove=“emptyFunction”(别给"true"这样会报警告的方法)

  • 这样在模拟器上touchpad还可以滚动,真机和模拟器上都没法拖动
  • 仅适合弹层没有滚动条的情况

在modal 最外层加catchtouchmove=“emptyFunction”,弹层滚动区域用scroll-view,并设置scroll-y为true

  • 只要有弹层,背景就不会滚动
  • 弹层内部的滚动会正常的scroll-view滚动
2 回复

你好,我这样设置后,弹层滚动区域在滚动时会滚动有时会穿透到modal上,然后执行了emptyFunction方法,导致弹层也滚动不了。说白了就是只要是滚动手势,总会穿透到下一层。

回到顶部