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读取中文COOKIE的解决办法
Feb 15 Javascript
Juqery Html(),append()等方法的Bug解决方法
Dec 13 Javascript
js截取小数点后几位的写法
Nov 14 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
Apr 20 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
Aug 11 Javascript
AngularJS入门教程之AngularJS指令
Apr 18 Javascript
webpack中引用jquery的简单实现
Jun 08 Javascript
喜大普奔!jQuery发布 3.0 最终版
Jun 12 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
Mar 17 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
Aug 24 Javascript
vue中$nextTick的用法讲解
Jan 17 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
Jun 08 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读取超大文件的实例代码
2012/04/01 PHP
探讨PHP中this,self,parent的区别详解
2013/06/08 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
一个tab标签切换效果代码
2009/03/27 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
原生实现一个react-redux的代码示例
2018/06/08 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
2020/10/21 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
[01:25:33]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第二场 12.20
2020/12/23 DOTA
python套接字流重定向实例汇总
2016/03/03 Python
Python中的random.uniform()函数教程与实例解析
2019/03/02 Python
python sort、sort_index方法代码实例
2019/03/28 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
深入了解NumPy 高级索引
2020/07/24 Python
Python执行时间的几种计算方法
2020/07/31 Python
Django中template for如何使用方法
2021/01/31 Python
百丽国际旗下购物网站:优购
2017/02/28 全球购物
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
几个Linux面试题笔试题
2012/12/01 面试题
预备党员自我批评思想汇报
2014/10/10 职场文书
公务员年度考核评语
2014/12/31 职场文书
护士先进个人总结
2015/02/13 职场文书
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js