h5 端页面在弹窗时禁止底部页面滚动

方法一: @touchmove.stop.prevent

在遮罩层中添加 @touchmove.stop.prevent ,代码如下:

<div class="dialog-mask" v-if="isDlgShow" @click="closeHandle(2)" @touchmove.stop.prevent /> 

 

方法二:prevent touchmove

通过prevent touchmove 阻止触摸滑动事件touchmove的默认行为,代码如下:

// 弹窗的事件
openHandle () {
      // 在弹窗打开时直接阻止目标元素的滑动事件的默认行为
      document.body.addEventListener('touchmove', this.scrollSetup, { passive: false })
      // 打开弹窗
      this.hideOrShowDlg()     
},
closeHandle (type) {
      document.body.removeEventListener('touchmove', this.scrollSetup)
      // 关闭弹窗
      this.hideOrShowDlg()
},
scrollSetup (e) {
      e.preventDefault()
      e.stopPropagation()
},
hideOrShowDlg(){
      this.showDlg = !this.showDlg
}

 

方法三:position:fixed

通过 position:fixed,在弹窗打开时,将目标元素进行固定,在关闭时恢复。

由于定位会改变元素在页面上的位置,所以需要在fixed前记录元素的位置,取消fixed之后将元素又滚动到原来的位置。

代码如下所示:

<script>
export default {
  name: "",
  data () {
    return {
      showDlg: false
    }
  },
  watch: {
  },
  created () {
  },
  mounted () {   
  },
  methods: { 
    openHandle () {
      /** ------------------ 跳出弹窗页面禁止滚动设置开始 ------------------ */    
      this.preventScoll(true)
      /** ------------------ 跳出弹窗页面禁止滚动设置结束 ------------------ */

      // 打开弹窗
      this.hideOrShowDlg()      
    },
    closeHandle () {
      /** ------------------ 关闭弹窗时移除禁止页面滚动设置开始 ------------------ */ 
      this.preventScoll(false)
      /** ------------------ 关闭弹窗时移除禁止页面滚动设置结束 ------------------ */

      // 关闭弹窗
      this.hideOrShowDlg()
    },
    hideOrShowDlg(){
      this.showDlg = !this.showDlg
    },
    /**
      * 阻止背景滚动
      * @param  Boolean  flag    [是否阻止背景滚动]
    */ 
    preventScoll (flag) {
      if (flag) {
        const top = document.documentElement.scrollTop || document.body.scrollTop;
        document.body.style.cssText += `
            position: fixed;
            width: 100vw;
            left: 0;
            top: ${-top}px;
        `
      } else {
        const top = document.body.style.top;
        document.body.style.cssText += `
            position: static;
        `;
        window.scrollTo(0, Math.abs(parseFloat(top)))
      }
    }
  }
}
</script>

原文地址:http://www.cnblogs.com/cwt981105/p/16898358.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性