评论

小程序滚动穿透,弹层滚动导致背景滚动的问题标准解决方案

滚动穿透,弹层滚动,弹性滚动,禁止滚动


先上代码

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滚动


最后一次编辑于  2020-12-07  
点赞 4
收藏
评论

3 个评论

  • 阿杜
    阿杜
    2020-12-28

    请问楼主,如果scroll-view高度区域是自适应的,该怎么解决,只能通过js计算来给高度吗?

    2020-12-28
    赞同
    回复 1
    • 小淼焱
      小淼焱
      2020-12-29
      试试flex
      2020-12-29
      回复
  • 阿旺
    阿旺
    2020-12-10

    2020-12-10
    赞同
    回复
  • 鸣鹤
    鸣鹤
    2020-12-09

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

    2020-12-09
    赞同
    回复 1
    • 小淼焱
      小淼焱
      2020-12-14
      确定用了scroll-view?
      2020-12-14
      回复
登录 后发表内容