移动端滚动穿透问题解决方案

移动端有可滚动的弹窗确定会遇到的问题,滑动弹层背景跟着滚动,若是弹窗里面的内容不须要滚动的能够直接粗暴的把滚动事件禁用掉,可是若是弹窗内容过多须要滚动那就不能够这样作。如下这个解决办法在线上使用没有问题,能够大胆拿去用。html

  • vue的解决办法

isShowDialog是控制弹窗显示的,监听isShowDialog的改变,对watch使用不明白的能够去看vue侦听器vue

watch:{
// 若是 ` isShowDialog` 发生改变,这个函数就会运行,第一个参数是isShowDialog最新的值
    isShowDialog(val){
        this.scrollForbid(val)
    }
}
scrollForbid(val) {
    let body = document.body
    if(val){
        // 弹窗显示的时候
        this.scrollTop = window.scrollY
        body.style.width = '100%'
        body.style.position = 'fixed'
        body.style.top = -this.scrollTop + 'px'
    } else {
        // 弹窗关闭
        body.style.width = ''
        body.style.position = ''
        body.style.top = ''
        window.srcollTo(0,this.scrollTop)
    }
}
  • 原生js解决办法

若是用原生来写的话调用scrollForbid(val)方法,禁止滚动的时候传true,解除滚动传false过去就能够了。ide

相关文章
相关标签/搜索