9

移动端有可滚动的弹窗肯定会遇到的问题,滑动弹层背景跟着滚动,如果弹窗里面的内容不需要滚动的可以直接粗暴的把滚动事件禁用掉,但是如果弹窗内容过多需要滚动那就不可以这样做。
更正(只适合白色背景的页面!只适合白色背景的页面!只适合白色背景的页面!因为有时候会出现闪白!我也没有找到完美解决滚动穿透的办法)

  • vue的解决办法

isShowDialog是控制弹窗显示的,监听isShowDialog的改变,对watch使用不明白的可以去看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过去就可以了。


吃和远方
218 声望7 粉丝

学习学习学习