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

2023-10-30

h5 端页面在弹窗时禁止底部页面滚动,在实现时,我尝试过几种方法。

方法一: @touchmove.stop.prevent

在遮罩层中添加 @touchmove.stop.prevent 可以实现禁止页面滚动,如下:

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

缺点

但是这种方法有个问题:弹窗里面内容有滚动条的也会无法滚动。

方法二: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
}

addEventListener

addEventListener 的第三个参数是 {passive: false}

语法格式:passive: Boolean

表示 listener 永远不会调用preventDefault();如果 listener 仍然调用了这个函数,客户端将会忽略它并抛出一个控制台警告。

缺点

这种方法同样也有个问题:弹窗里面内容有滚动条的也会无法滚动。

方法三: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>

这种方法,实现了需求,目前还没发现不足之处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

css h5 端弹窗时禁止底部页面滚动 的相关文章

  • CSS 内边框?

    我纯粹用 CSS 创建了左侧的按钮 它是一个div 中的一个div 然而 右侧的三个按钮是background属性于img标签 我这样做是为了按照以下说明模拟翻转效果here http kyleschaeffer com best prac
  • 有没有办法在 React 中自动播放音频而不使用 onClick 事件?

    我在尝试在 componentDidMount 中播放音频时收到此错误 未捕获 承诺中 DOMException play 失败 因为用户没有先与文档交互 componentDidMount document getElementById
  • 为动态加载的 HTML 内容触发 Bootstrap JS 行为

    我正在动态加载包含 Bootstrap 标记的 HTML 模板 但是 Bootstrap Javascript 行为不会应用于加载的内容 例如 如果加载的内容包含 Bootstrap 模式的标记 则该模式将无法正确运行 有没有办法可以触发
  • Angular UI-Router:多个 URL 到单一状态

    我已经开始使用 Angular 的 ui router 并且我正在尝试弄清楚如何让多个 URL 引用单个状态 例如 orgs 12354 overview retyrns the same pages as org overview 我的
  • 使用 IE9、10、11 的 CSS 将比例打印到 50% 等百分比

    Zoom css 属性不适用于 IE9 10 11 观察到打印预览 UI 令人不安 默认比例为 缩小以适合 当我将此比例从 缩小 更改为适合 50 时 页面显示正常 打印预览 任何人都可以帮助我如何使用 CSS 代码将比例设置为 50 为页
  • 在 UIWebView 中禁用复制和粘贴

    几乎 我已经尝试了一切方法来禁用复制 粘贴UIWebView但对我来说没有任何作用 我正在加载我的UIWebView来自字符串 字符串数组 如下所示 webView loadHTMLString NSString stringWithFor
  • SVG线宽问题

    我开始了我的svg学习 我想用svg线做一些技巧吧 但有件事我不明白 我为每个技能创建 2 行 一行是空的 另一行是知识百分比 问题是 前两行的高度是我给出的笔画宽度的一半 其他线都有很好的高度 这是一个 jsbin http jsbin
  • 什么可能导致 Firefox 中出现此 HTML/CSS 渲染问题?

    款式 h2 color 71D0FF font size 11px font weight bold margin 0px 0px 5px 0px a box color FFFFFF important cursor pointer di
  • 如何防止输入文本中出现“后重音”

    我相信这是一个简单的问题 但在谷歌上搜索几个小时后我找不到任何答案 也许我无法在搜索中使用正确的单词 P 我有一个 javascript 方法 可以防止用户用数字以外的其他字符填充文本框 如下面的代码所示 它在 KeyDown 事件中使用
  • 使用 Javascript/Node.js 在代码内执行 mongoimport

    node js javascript 中是否有任何库可供个人使用mongoimport在代码中 据我了解 mongoimport 有点像 exe 您必须先执行它 然后才能使用其文本输入环境 是否可以在我的代码中执行 mongoimport
  • Angular 2 将字符串转换为 md5 哈希

    我找到了ts md5 https www npmjs com package ts md5包 但在示例中它有一个hashStr方法 但现在不行了 类型上不存在属性 hashStr Md5 使用该错误后 该错误会记录在我的控制台中 我怎样才能
  • Javascript location.href 到 mailto 触发 GET HTTP,该 HTTP 在 Chrome 中被取消

    我有一个按钮可以触发以下 javascript 函数 function sendEmail var mail mailto email protected cdn cgi l email protection location href m
  • 在 Chrome 开发者工具中禁用调试器语句

    我正在尝试对恶意 JavaScript 进行逆向工程 当我最初加载侧面时 会注入 JS 代码 其中包括 debugger 语句并将断点注入我的 chrome 开发人员控制台 通过stackoverflow阅读 禁用所有断点does not帮
  • 检查浏览器空闲的替代方法

    我有一个简单的网络信息亭 在鼠标未使用 jQuery 移动 30 秒后显示用户操作提示 var i null body wrap mousemove function clearTimeout i overlay fadeOut i set
  • 如何使用 Javascript 在 html 文件中搜索字符串?

    我有 5 个 html 文件 并且有一个搜索表单 我想用它来搜索这些 html 文件中的文本
  • 从请求url获取hash参数

    我有这样的网址 http www coolsite com daily plan id 1 http www coolsite com daily plan id 1解析该字符串并读取哈希值 id 之后的值 的最简单方法是什么 谢谢 在客户
  • 如何使用 Javascript OAuth 库不暴露您的密钥?

    看着Twitter OAuth 库 https dev twitter com docs twitter libraries 我看到了这个注释 将 JavaScript 与 OAuth 结合使用时要小心 不要暴露你的钥匙 然后 看着jsOA
  • ‘state’未定义 no-undef

    我使用教程来学习 React 但我很快就陷入困境 在教程中 他们使用以下代码 import React Component from react class Counter extends Component state count 0 r
  • Array.of 与“[ ]”。何时使用 Array.of 而不是“[ ]”?

    当我发现时我正在读一些书Array of https developer mozilla org en docs Web JavaScript Reference Global Objects Array of 根据 MDN Array o
  • javascript:完全删除top.location.hash?

    如果我的地址栏中已经有一个哈希值 例如domain com whatever 我打电话 top location hash wathever 被转换为domain com 没有任何内容 是否可以完全删除哈希值 所以没有 left 因为如果我

随机推荐

  • openpyxl-(操作Excel)

    文档 https openpyxl readthedocs io en stable index html 注意事项 1 查看正在打开的excel表格就不会报错 但是 如果操作正在打开的excel表格 就会报错 写入异常 因为你正在打开当前
  • 嵌入式开发八:ARM cortex A8/9 - Android NDK - NEON介绍以及优化

    ARM cortex A8 9 Android NDK NEON介绍以及优化 资源的整理总结 1 What is NDK Android开发官网介绍 http developer android com sdk ndk overview h
  • 结构体中的函数指针(c语言里一种思想)

    阅读raft源码的时候看到结构体里面的void xx 看不懂这个地方 看上去又像面向对象的类方法 但是这是c语言的结构体啊 了解了这是函数指针 小趴菜 一 函数指针 函数指针是指向函数的指针变量 通常我们说的指针变量是指向一个整型 字符型或
  • 图片URL转Base64,Base64转二进制文件流

    现在的项目中对于图片的处理很多 对于图片的URL转Base64或者Base64转文件流很是不好处理 下面我总结了这两种方法互转的代码 希望对你有所帮助 图片URL 转Base64 function getBase64Image img va
  • Python模块Collection——OrderedDict

    OrderedDict 有序字典 OrderedDict是dict的子类 它记住了内容添加的顺序 import collections print Regular dictionary d d a A d b B d c C for k v
  • 用Python实现双目立体匹配SAD算法

    SAD Sum of absolute differences 是一种图像匹配算法 SAD算法的基本流程 1 构造一个小窗口 类似与卷积核 2 用窗口覆盖左边的图像 选择出窗口覆盖区域内的所有像素点 3 同样用窗口覆盖右边的图像并选择出覆盖
  • 基于Matlab的时间序列(Time Series)(附代码)

    时间序列 一 模型介绍 1 1 时间序列的不同分类 1 2 时间序列构成要素 1 3 三种时间序列模型 1 3 1 AR p 模型 1 3 2 MA q 模型 1 3 3 ARMA p q 模型 1 3 4 ARIMA p d q 模型 1
  • Picture 【HDU - 1828】【对于扫描线更新的一些特殊情况】

    题目链接 这个问题 在以前写过博客 但是今朝再来看 属实还存有一些问题未曾解决 举个例子 我们来画一张图 并且给每个边标个序号 如图 我们有4条边 按照之前想的办法 我们进行处理 我们先放进去1这号边 再放入2这号边 实际上 这时候我们已经
  • JAVA使用Jedis操作Redis的基本常用的API。

    package com coderman test import com coderman entities Customer import com coderman entities Department import org junit
  • crafting interpreters 介绍

    crafting interpreters 作者 的博客 crafting interpreters 出生的介绍 英文 crafting interpreters 出生的介绍 中文 crafting interpreters 在线阅读 cr
  • Qt的快捷键汇总

    t的基础知识 感谢大家来看我的分享 一般操作的键盘快捷键 调试相关操作的键盘快捷键 项目相关操作的键盘快捷键 帮助相关操作的键盘快捷键 感谢大家来看我的分享 第一次分享 介绍一下Qt的快捷键 方便大家在工作中速查 一般操作的键盘快捷键 操作
  • 搞懂电路的极点和零点

    在这里 作者将尝试找出关于极点和零点的物理感觉 使用运算放大器来控制它们在复平面中的位置 并利用电路的自然响应来说明极点 零点位置的影响 单端口电路的自然响应 我们来看图1中的无源线性单端口电路 它包括电阻 电容和电感 图1 a 无源单端口
  • touchmove 长按_移动端 javascript 实现长按拖动

    最近我要在移动端实现一个长按拖动功能 发现一个库 https github com bevacqua d 非常好用 用起来也非常简单 下面是一个可以运行的例子 Document box1 height 200px background co
  • 项目 和 api 接口说明文档

    注意 所有api的域名为 http 如果后面文档中 有的域名地址和这里不一样 以这里的为主 获取图文资讯 地址 api getnewlist 作用描述 主要用来获取点击首页上的 新闻资讯 后进入到的图文列表页面的数据 大家在做的时候可以使用
  • Cesium defaultAccessToken 修改

    engine Source Core Ion js中修改 defaultAccessToken 值即可 token申请地址 Cesium ion
  • 如何配置anaconda中环境的路径

    如何配置anaconda中环境的路径 虚拟环境安装在C盘绝对不是一种正确的决定 但是如何指定虚拟环境的路径呢 1 先查阅anaconda文档 发现可以指定路径安装 conda create help 2 安装虚拟环境到指定路径中 conda
  • Jquery鼠标右键插件contextMenu使用方法及自定义图标

    第一步 引入文件 文件在github上下载的 都可以搜到 我是把整个dist文件夹里的全放进项目里了 把这俩文件引进去 position js文件我没有引 暂时不知道这文件干啥用的 js部分 contextMenu selector lis
  • 如何组织项目目录结构——项目目录结构规范

    为什么要规范项目目录结构 首先我们要遵循约定由于配置的原则 通过约定代码结构或者命名规范来减少配置数量 例如 将所有 css后缀的文件放在css文件夹下 将xx js文件压缩后的重新命名为xx min js 那怎么样的目录结构是好的呢 没有
  • 【PTA】 sdut-array2-2-局部峰值

    给定一个N行乘N列的2D数组 逐行扫描该值并打印出所有局部峰值 该值大于其左上 上 右上 左 右 左下 下 右下的值 如果有 N的范围是2到150 输入格式 多组输入 每组输入包含两部分 第一行包含整数N 表示2D数组的大小 后面的N行中的
  • css h5 端弹窗时禁止底部页面滚动

    h5 端页面在弹窗时禁止底部页面滚动 在实现时 我尝试过几种方法 方法一 touchmove stop prevent 在遮罩层中添加 touchmove stop prevent 可以实现禁止页面滚动 如下 div class dialo