弹窗是一种常见的交互方式,而蒙层是弹窗必不可少的元素,用于隔断页面与弹窗区块,暂时阻断页面的交互。但是,在蒙层元素中滑动的时候,滑到内容的尽头时,再继续滑动,蒙层底部的页面会开始滚动,显然这不是我们想要的效果,因此需要阻止这种行为。

1.新建utils/modalHelper.js文件

  1. // 解决遮罩层滚动穿透问题,分别在遮罩层弹出后和关闭前调用
  2. let _scrollTop
  3. class ModalHelper {
  4. // popup 显示时调用
  5. static afterOpen () {
  6. _scrollTop = document.scrollingElement.scrollTop
  7. document.body.style.position = 'fixed'
  8. document.body.style.top = -_scrollTop + 'px'
  9. }
  10.  
  11. // popup 关闭时调用
  12. static beforeClose () {
  13. document.body.style.position = ''
  14. document.body.style.top = ''
  15. // 使 scrollTop 恢复原状
  16. document.scrollingElement.scrollTop = _scrollTop
  17. }
  18. }
  19.  
  20. export default ModalHelper

2.main.js中全局引入ModalHelper

  1. import ModalHelper from './utils/modalHelper'
  2. Vue.prototype.$modalHelper = ModalHelper

3.vue页面使用

  1. isPayment1(val) {
  2. if (val) {
  3. this.$modalHelper.afterOpen(); // 打开禁用
  4. } else {
  5. this.$modalHelper.beforeClose(); // 关闭禁用
  6. }
  7. },

4.为避免用户使用按键返回,需在页面离开时移除禁用即可

  1. beforeRouteLeave (to, from, next) {
  2. this.$modalHelper.beforeClose()
  3. next()
  4. },

参考:

1、https://blog.csdn.net/guxiansheng1991/article/details/80503497

2、https://www.cnblogs.com/yongwang/p/7804490.html

js 弹层下面的body禁止滚动的更多相关文章

  1. HTML JS 弹层后底部页面禁止滚动处理

    1.打开新页面时需要禁止鼠标滚轮,禁止页面滑动: 1 2 3 4 在调用显示层时加上这句js代码就可以了: document.documentElement.style.overflow = &quo ...

  2. 关于移动端弹层下的body滚动

    关于移动端弹层下的body滚动 这个问题在移动端挺常见的,网上也有一些解决方法,现在笔者来总结一下:css的解决方案都有兼容问题,js是比较稳定的解决方法(虽然比较麻烦) ps: 本文的例子都是用vu ...

  3. Layer.js弹层的一些简单的使用

    //-----------这里只是简单的做一下记录,没有封装,作为笔记防止忘记了 //----contentMsg 里面是可以传入 HTML代码的 top.layer.alert(contentMsg ...

  4. js 弹层 提示

    <!DOCTYPE html><html style="height: 100%;"><head lang="en"> &l ...

  5. 【Javascript】好用的js弹层插件,layerUI

    官网:layerUI 中文手册:layerAPI

  6. js几个常用的弹层

    js弹层技术很常见,自己每次用上网找,一找一大堆. 对比了几种,考虑通用性和易用性,这里记录两个. jQueryUI的http://jqueryui.com/dialog/#modal-form ar ...

  7. JS弹出层制作,以及移动端禁止弹出层下内容滚动,overflow:hidden移动端失效问题

    HTML <div class="layer"> <div class="menu-list"> <span>社会</ ...

  8. 移动端和PC端弹出遮罩层后,页面禁止滚动的解决方法及探究

    PC端解决方案 pc端的解决思路就是在弹出遮罩层的时候取消已经存在的滚动条,达到无法滚动的效果. 也就是说给body添加overflow:hidden属性即可,IE6.7下不会生效,需要给html增加 ...

  9. js - 移动端的超出滚动功能,附带滚动条,可解决弹层中滚动穿透问题。

    背景: 弹层里边有可滚动区域时,在移动端的坑我就不多说了. 找了很多解决滚动穿透的方案,最终都不能完美解决. 一气之下自己js撸了一个. 效果图: 原理: 1.解决滚动穿透:通过给弹层绑定touchm ...

随机推荐

  1. vim字符匹配

    按 : 这个符号进入命令模式后,可以对文本信息进行替换.删除等操作.

  2. SCALA基础知识学习

    注:本文只说和Java不同的地方. 总结自: Scala详细教程 Scala教程 scala基础语法 Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ";" 是 ...

  3. RGB转YUV 各种库的性能比较

    分辨率   1920*1080 平台  : X64  Windows  VS2015 测试  BGR24-->YUV420 trans_scale: 4.14 ms (自己写得)libyuv  ...

  4. opencv 加载pb

    1.错误1         Tensor's data type is not supported the type of Mul  is DF_Float 2.  错误2 type == " ...

  5. java玩转zip压缩包

    首先将相关jar包引入pom.xml中 <!-- 解压zip --> <dependency> <groupId>org.apache.ant</groupI ...

  6. 字符串转json数组

    import net.sf.json.JSONArray;import net.sf.json.JSONObject; String content = inBankOdd.getContent(). ...

  7. HTML锚点的使用

    锚点: 连接到的本页面的位置:

  8. Computer Vision_33_SIFT:Remote Sensing Image Registration With Modified SIFT and Enhanced Feature Matching——2017

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  9. C语言字符串格式化输出

    %ms:将字符串全部输出,如果字符串长度小于m,在左边用空格将输出宽度补齐为m: %.ns:如果n大于字符串长度,将字符串全部输出,否则,输出前n个字符: %m.ns:如果n不大于m,输出指定字符串的 ...

  10. Mysql实现数据库主从复制架构

    MySQL复制 (1)扩展方式: Scale Up ,Scale Out (2)MySQL的扩展 读写分离 复制:每个节点都有相同的数据集 向外扩展 二进制日志 单向 (3)复制的功用: 数据分布 负 ...