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 相关文章推荐
PJ Blog修改-禁止复制的代码和方法
Oct 25 Javascript
用JavaScript和注册表脚本实现右键收藏Web页选中文本
Jan 28 Javascript
代码生成器 document.write()
Apr 15 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
Apr 20 Javascript
基于jquery实现表格无刷新分页
Jan 07 Javascript
深入理解js promise chain
May 05 Javascript
Javascript单例模式的介绍和实例
Oct 08 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
Nov 01 Javascript
jquery Banner轮播选项卡
Dec 26 Javascript
JS自动生成动态HTML验证码页面
Jun 14 Javascript
Underscore之Array_动力节点Java学院整理
Jul 10 Javascript
Vue DevTools调试工具的使用
Dec 05 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
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
javascript中常用编程知识
2013/04/08 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
js+css实现打字效果
2020/06/24 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
用Python逐行分析文件方法
2019/01/28 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
酒店行政人事部经理职务说明书
2014/02/26 职场文书
职位说明书范文
2014/05/07 职场文书
个人担保书格式范文
2014/05/12 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
素质教育学习心得体会
2016/01/19 职场文书