vue实现一个移动端屏蔽滑动的遮罩层实例


Posted in Javascript onJune 08, 2017

在扯废话浪费大家的时间之前,先上个代码好了,使用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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript+css 网页每次加载不同样式的实现方法
Dec 27 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
Sep 12 Javascript
输入密码检测大写是否锁定js实现代码
Dec 03 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
浅谈JavaScript事件的属性列表
Mar 01 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
Mar 20 Javascript
详解JS中Array对象扩展与String对象扩展
Jan 07 Javascript
javascript每日必学之封装
Feb 23 Javascript
bootstrap模态框远程示例代码分享
May 22 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
Jan 16 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
Jun 01 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
Dec 13 Javascript
微信小程序开发之map地图实现教程
Jun 08 #Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
Jun 08 #Javascript
微信小程序开发之实现自定义Toast弹框
Jun 08 #Javascript
微信小程序开发之toast等弹框提示使用教程
Jun 08 #Javascript
javascript实现二叉树遍历的代码
Jun 08 #Javascript
微信小程序tabbar不显示解决办法
Jun 08 #Javascript
javascript实现二叉树的代码
Jun 08 #Javascript
You might like
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
JS实现复制功能
2017/03/01 Javascript
tab栏切换原理
2017/03/22 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
TensorFlow实现模型评估
2018/09/07 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
python 的topk算法实例
2020/04/02 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
flask开启多线程的具体方法
2020/08/02 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
深入浅析HTML5中的article和section的区别
2018/05/15 HTML / CSS
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
初婚初育证明
2014/01/14 职场文书
模特职业生涯规划范文
2014/02/26 职场文书
爱国演讲稿400字
2014/05/07 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
2014年除四害工作总结
2014/12/06 职场文书
社团招新宣传语
2015/07/13 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers