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 网页跳转的方法
Dec 24 Javascript
js的写法基础分析
Jan 17 Javascript
JQuery+DIV自定义滚动条样式的具体实现
Jun 25 Javascript
Javascript中Array.prototype.map()详解
Oct 22 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
Dec 08 Javascript
Vue.js基础知识小结
Jan 13 Javascript
jQuery ajax实现省市县三级联动
Mar 07 Javascript
Axios学习笔记之使用方法教程
Jul 21 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
Nov 02 Javascript
layui递归实现动态左侧菜单
Jul 26 Javascript
微信小程序修改数组长度的问题的解决
Dec 17 Javascript
vue判断按钮是否可以点击
Apr 09 Vue.js
微信小程序开发之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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
2016/09/05 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
Python实现全角半角转换的方法
2014/08/18 Python
Python捕捉和模拟鼠标事件的方法
2015/06/03 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
python二元表达式用法
2019/12/04 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
标准毕业生自荐信范文
2013/11/04 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
《胡杨》教学反思
2014/02/16 职场文书
工伤赔偿协议书
2014/04/15 职场文书
经济贸易系求职信
2014/08/04 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
大学生翘课检讨书范文
2014/10/06 职场文书
老兵退伍标语
2014/10/07 职场文书
经济纠纷起诉状
2015/05/20 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
python井字棋游戏实现人机对战
2022/04/28 Python