原理:

 

遮罩打开,内容部分滚动到底时,继续划动会导致底层页面的滚动,这就是滚动穿透。

但由于平台自身原因,除了h5平台外 ,其他平台都不能在在组件内禁止滚动穿透,所以在微信小程序、App 平台,页面内需要用户特殊处理一下

解决:

在 微信小程序/App 平台可使用 page-meta 组件动态修改页面样式 ,

需要在 data 中定义一个变量,用来表示 uni-popup (其他遮罩也可)的开启关闭状态,并通过这个变量修改 page-meta 的 overflow
 属性。

代码:

<page-meta :page-style="'overflow:'+(show?'hidden':'visible')"></page-meta>

tips:

* h5 滚动穿透不需要处理
* wx、app 需要 使用 page-meta 组件配合阻止滚动穿透
* 注意 page-meta 组件,一个页面只能存在一个
* 其他平台无法阻止滚动穿透,建议使用 scroll-view 滚动 ,手动设置 overflow:hidden,同 page-meta 方法一致
补充:

uniapp

<page-meta
:page-style="'overflow:'+(showOverlay?'hidden':'visible')"></page-meta>

如果编译为 h5 需要增加方法:

下面是开启遮罩后禁止滚动

openOverlay() {
                this.showOverlay = true;
                let uniPlatform = uni.getSystemInfoSync().uniPlatform;
                // H5禁止滚动
                if (uniPlatform == 'web') {
                    var mo = function(e) {
                        e.preventDefault();
                    };

                    document.body.style.overflow = 'hidden';
                    document.addEventListener("touchmove", mo, false);
//禁止页面滑动
                }

            },
            //关闭遮罩
            closeOverLay: function() {
                this.showOverlay = false;
                let uniPlatform = uni.getSystemInfoSync().uniPlatform;
                if (uniPlatform == 'web') {
                    var mo = function(e) {
                        e.preventDefault();
                    };
                    document.body.style.overflow = ''; //出现滚动条
                    document.removeEventListener("touchmove", mo, false);
                }
            },

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信