在扯废话浪费大家的时间之前,先上个代码好了,使用vue实现起来很简单……

    <div class="overlayer" @touchmove.prevent >
</div>

对,就是这么简单,加上@touchmove.prevent就可以屏蔽滑动页面了,然后再和普通的遮罩层一样,加点样式

/*遮罩层*/
.overlayer{
position:fixed;
left:0;
top:0;
width:100%;
height:100%;
z-index:10;
}

如此,便可以了_(:з)∠)_,vue真是好用啊……

以下是废话和原理

开发移动端页面的时候有一个很比较常见的需求,在出现弹窗时,禁止滑动弹窗后面的主体页面;

实际上大部分弹窗插件(或者组件)都带了这样的功能,所以我自己也从来没研究过这个;

这次的项目突然出现了一个需要自己写弹窗的场景……我瞬间就懵逼了QwQ

虽然毫无思路,但是代码还是要写的,效果还是要实现的,问题还是要解决的,而程序员解决问题的第一步,自然就是先去百度一下;

一般来讲吧,普通问题都可以直接百度解决,百度不到的再考虑问人,屏蔽滑动的遮罩层这样常见的需求,自然是有一大堆的解决方案,不过……太多了根本没法选啊(╯‵□′)╯︵┻━┻

随便试了一套方案,未果,遂放弃了继续尝试的打算……还是去翻别人的源码吧。

首先想到了mint ui中的popup组件;

认真阅读了一下,发现这个遮罩层也没做什么事情,就是屏蔽了一下touchmove事件,拿到这个思路再回去自己查了下资料,移动端的屏幕滑动,实际上就是touchmove事件的默认行为,在冒泡过程中任何一层阻止这个默认行为,都可以阻止屏幕滑动,弄懂原理,实现起来就简单了,传统做法是在body上添加一个touchmove事件处理器,在显示遮罩层的时候使用.preventDefault()方法阻止默认行为,而vue就更简单了,把弹窗之类的都写在遮罩层元素内部,然后直接在遮罩层上加上一个取消默认行为的事件处理器,就可以咯~

注意!

如果弹窗不在遮罩层内部,那么冒泡就不会经过遮罩层,也就无法屏蔽滑动了0.0

    <div class="overlayer" @touchmove.prevent >
</div>
<div class="popup">
如果在这个div中滑动,触发的事件是不会经过overlayer的,也就无法屏蔽滑动了
</div>

如果实在不能把弹窗放到遮罩层内,那么给弹窗加一个单独的 .prevent 修饰符也可以,下面这两种方式都是有效的:

   <!--plan A-->
<div class="overlayer" @touchmove.prevent >
<div class="popup">
如果在这个div中滑动,触发的事件会经过overlayer,可以屏蔽滑动
</div>
</div> <!--plan B-->
<div class="overlayer" @touchmove.prevent >
</div>
<div class="popup" @touchmove.prevent>
如果在这个div中滑动,触发的事件也会被禁用默认行为, 也可以屏蔽滑动
</div>

PC端方案

这种屏蔽方式只是屏蔽了滑动,对于PC端的鼠标滚轮是无效的,但屏蔽鼠标滚轮也很简单,把 touchmove 事件处理器改成 scroll 事件的处理器就好了~就像这样:

    <div class="overlayer" @scroll.prevent >
</div>

参考:万能的官方文档-事件修饰符

vue实现一个移动端屏蔽滑动的遮罩层的更多相关文章

  1. 如何用vue打造一个移动端音乐播放器

    写在前面 没错,这就是慕课网上的那个vue音乐播放器,后台是某音乐播放器的线上接口扒取,虽然这类项目写的人很多,但不得不说这还是个少有的适合vue提升的好项目,做这个项目除了想写一个比较大并且功能复杂 ...

  2. 前端基于vue,后台采用springboot+shiro的方式搭建的一个移动端商品展示平台

    基于vue实现的移动端商品展示页,可以web-view的方式嵌入到小程序中,布局简约.大气,减少初学者或开发者不必要的工作量.后台维护采用的springboot+shiro的方式,为广大爱好者提供展示 ...

  3. vue移动端出现遮罩层时在遮罩层滑动时禁止遮罩层下方页面滑动

    h5页面 点击出现弹框时 在遮罩层上面滑动时 下方的页面会出现滑动现象 解决方法 我知道的有以下两种 在遮罩层标签上添加@touchmove.prevent 把遮罩层显示时把下方的父盒子css设置为固 ...

  4. 使用Vue2+webpack+Es6快速开发一个移动端项目,封装属于自己的jsonpAPI和手势响应式组件

    导语 最近看到不少使用vue制作的音乐播放器,挺好玩的,本来工作中也经常使用Vue,一起交流学习,好的话点个star哦 本项目特点如下 : 1. 原生js封装自己的跨域请求函数,支持promise调用 ...

  5. 写一个js向左滑动删除 交互特效的插件——Html5 touchmove

    需求描述 需要实现类似QQ中对联系人的操作:向左滑动,滑出删除按钮.滑动超过一半时松开则自动滑到底,不到一半时松开则返回原处. 纯js实现 使用了h5的touchmove等事件,以及用js动态改变cs ...

  6. 弹出页面遮罩层,以及web端和移动端阻止遮罩层的滑动。

    最近项目遇到了遮罩层的一些问题,总结一下: 弹出遮罩层 遮罩层弹出有非常多的方法,这里只写出本人用的代码,使用jq操作dom的方法进行实现的. <style>.box{position:a ...

  7. 移动端触摸滑动插件Swiper

    移动端触摸滑动插件Swiper 04/02/2015 一.了解Swiper 目前移动端项目一般都需要具有触屏焦点图的效果,如果你也需要实现这一功能的话,Swiper是一个不错的选择. 1.他不需要加载 ...

  8. 移动端tab滑动和上下拉刷新加载

    移动端tab滑动和上下拉刷新加载 查看demo(请在移动端模式下查看) 查看代码 开发该插件的初衷是,在做一个项目时发现现在实现移动端tab滑动的插件大多基于swiper,swiper的功能太强大而我 ...

  9. 根据bootstrap框架实现移动端触摸滑动的方法

    有一个移动端的项目要求用jquery+bootstrap,其中有一个轮播图,需求是要求可以手触滑动,但是bootstrap中没有写手触滑动的方法,自己琢磨着写了出来,供大家参考. $(function ...

随机推荐

  1. 寻找链表中倒数第K个结点的位置

    输入一个链表,输出该链表中倒数第K个结点. struct ListNode { int m_nValue; ListNode* m_pNext; }; ListNode* FindKthToTail( ...

  2. 《chkconfig命令》-linux命令五分钟系列之四

    本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...

  3. centos6.5安装vsftp服务并配置虚拟账户ftp

      当我们的用户量越来越大时,继续创建更多的系统用户是不明智的,这时就需要为vsftpd创建虚拟账户,但vsftpd虚拟账户的数据库要保存在Berkeley DB格式的数据文件中,所以需要安装db4- ...

  4. ios开发之代理&&协议

    Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但具体怎么做 ...

  5. C# .NET3.5 改为 到.NET2.0 时 TypedTableBase 报错解决方法

    NET 3.5 降版本 到.NET 2.0.不出意外,问题必然来了.编译错误一:错误 1 命名空间“System”中不存在类型或命名空间名称“Linq”(是缺少程序集引用吗?)解决:删掉该引用--没用 ...

  6. php学习代码杂记

    16/2/22 字符串连接 (1)连接运算符(“.”):它返回将右参数附加到左参数后面所得的字符串. (2)连接赋值运算符(“.=”):它将右边参数附加到左边的参数后. 相当于JS里面的 += . $ ...

  7. php判断手机移动设备访问

    <?php function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROF ...

  8. JS Math.sin() 与 Math.cos() 用法

    Math.sin(x)      x 的正玄值.返回值在 -1.0 到 1.0 之间: Math.cos(x)    x 的余弦值.返回的是 -1.0 到 1.0 之间的数: 这两个函数中的X 都是指 ...

  9. iOS中浅淡UIApplication单例-b

    在iOS的操作系统中 每一个程序都对应一个application单例,每一个application都对应一个Appdelegate代理,在代理中控制程序的各个状态.我们在程序中获取Applicatio ...

  10. [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]

    题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...