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 相关文章推荐
ie focus bug 解决方法
Sep 03 Javascript
学习ExtJS fit布局使用说明
Oct 08 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
Aug 04 Javascript
js判断移动端是否安装某款app的多种方法
Dec 18 Javascript
js 实现一些跨浏览器的事件方法详解及实例
Oct 27 Javascript
简单理解js的冒泡排序
Dec 19 Javascript
ES6模块化的import和export用法方法总结
Aug 08 Javascript
微信小程序引用公共js里的方法的实例详解
Aug 17 Javascript
Angular实现双向折叠列表组件的示例代码
Nov 21 Javascript
使用vue-cli编写vue插件的方法
Feb 26 Javascript
jQuery length 和 size()区别总结
Apr 26 jQuery
vue实现页面内容禁止选中功能,仅输入框和文本域可选
Nov 09 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
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
使用正则替换变量
2007/05/05 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
javascript模拟订火车票和退票示例
2014/04/24 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
JavaScript实现简单的拖动效果
2016/07/02 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
简单实现js无缝滚动效果
2017/02/05 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
2017/05/03 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
python求斐波那契数列示例分享
2014/02/14 Python
python django集成cas验证系统
2014/07/14 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
Python截图并保存的具体实例
2021/01/14 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
岗位职责的含义
2013/11/17 职场文书
求职推荐信范文
2013/12/01 职场文书
公司新员工的演讲稿注意事项
2014/01/01 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
安全横幅标语
2014/06/09 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
基石观后感
2015/06/12 职场文书
python微信智能AI机器人实现多种支付方式
2022/04/12 Python
WinServer2012搭建DNS服务器的方法步骤
2022/06/10 Servers