最近在做公司的一个导游导览项目,框架用的是[email protected]
期间在做一个播放列表弹框的时候,遇到了遮罩层滚动和弹窗内容滚动,会导致底层页面内容滚动的问题
经过上网搜寻解决方法,和亲自实践,终于找到了能同时兼容H5和小程序的完美解决方案
当然期间也是踩了各种坑,网上的有些办法根本没起作用,所以决定自己来写一篇,下面是解决办法:
- 先说H5的,比较简单,只需要通过弹窗的显示状态,来动态设置底层页面最外层View的overflow属性即可。当弹窗显示的时候,
document.body.style.overflow = 'hidden';
当弹窗隐藏的时候,document.body.style.overflow = 'scroll';
- 由于小程序没有DOM结构,上面的方案自然是不起任何作用(就是这么傲娇)。小程序要分两步来解决,先是mask蒙层会滑动穿透的问题,这个可以采用Taro的
catchMove属性
来解决,官方文档上也有说,见下方图片。然后是弹窗内部滚动穿透的问题,采用的是将弹窗内部最外层View改为ScrollView,光这样改还不行,还要在ScrollView的外层再加个View并且加上catchMove属性
。直接在ScrollView上面加catchMove不行,ScrollView不支持这个属性。
注:Taro的CatchMove属性是Taro 3.0.21版本才开始支持
如上操作,Taro 弹窗滚动穿透问题的问题就完美解决了。可同时兼容H5和小程序。