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 相关文章推荐
js资料toString 方法
Mar 13 Javascript
js资料prototype 属性
Mar 13 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
Jul 25 Javascript
TypeScript 中接口详解
Jun 19 Javascript
Bootstrap每天必学之基础排版
Nov 20 Javascript
jQuery UI库中dialog对话框功能使用全解析
Apr 23 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
Apr 30 Javascript
Backbone.js框架中Model与Collection的使用实例
May 07 Javascript
jQuery右下角悬浮广告实例
Oct 17 Javascript
详解Vue监听数据变化原理
Mar 08 Javascript
JavaScript实现五子棋游戏的方法详解
Jul 08 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
Sep 10 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
PHPCMS的使用小结
2010/09/20 PHP
php向js函数传参的几种方法
2014/08/10 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
jQuery .attr()和.removeAttr()方法操作元素属性示例
2013/07/16 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
JavaScript设计模式之抽象工厂模式介绍
2014/12/28 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
js获取form的方法
2015/05/06 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
js实现抽奖效果
2017/03/27 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
Python2/3中urllib库的一些常见用法
2017/12/19 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
python的pstuil模块使用方法总结
2019/07/26 Python
python根据时间获取周数代码实例
2019/09/30 Python
python time()的实例用法
2020/11/03 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
SCHIESSER荷兰官方网站:德国内衣专家
2020/10/09 全球购物
配件采购员岗位职责
2013/12/03 职场文书
军神教学反思
2014/02/04 职场文书
国旗下的演讲稿
2014/05/08 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书