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 相关文章推荐
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
Feb 09 Javascript
jquery 多行滚动代码(附详细解释)
Jun 17 Javascript
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
Jquery chosen动态设置值实例介绍
Aug 08 Javascript
JQuery跳出each循环的方法
Apr 16 Javascript
jQuery的事件委托实例分析
Jul 15 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
Aug 11 Javascript
Vue.js父与子组件之间传参示例
Feb 28 Javascript
ES6实现的遍历目录函数示例
Apr 07 Javascript
jQuery 实时保存页面动态添加的数据的示例
Aug 14 jQuery
vue中添加与删除关键字搜索功能
Oct 12 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
Mar 02 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
php缓存技术介绍
2006/11/25 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
2015/10/21 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
Javascript原生ajax请求代码实例
2020/02/20 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
python下载文件时显示下载进度的方法
2015/04/02 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
python实现AdaBoost算法的示例
2020/10/03 Python
美国智能家居专家:tink
2019/06/04 全球购物
体育教师工作总结的自我评价
2013/10/10 职场文书
煤矿班组长岗位职责
2013/12/29 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
python 遍历磁盘目录的三种方法
2021/04/02 Python
基于JavaScript实现省市联动效果
2021/06/22 Javascript
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python