vue实现一个移动端屏蔽滑动的遮罩层
在扯废话浪费大家的时间之前,先上个代码好了,使用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>
vue实现一个移动端屏蔽滑动的遮罩层的更多相关文章
- 如何用vue打造一个移动端音乐播放器
写在前面 没错,这就是慕课网上的那个vue音乐播放器,后台是某音乐播放器的线上接口扒取,虽然这类项目写的人很多,但不得不说这还是个少有的适合vue提升的好项目,做这个项目除了想写一个比较大并且功能复杂 ...
- 前端基于vue,后台采用springboot+shiro的方式搭建的一个移动端商品展示平台
基于vue实现的移动端商品展示页,可以web-view的方式嵌入到小程序中,布局简约.大气,减少初学者或开发者不必要的工作量.后台维护采用的springboot+shiro的方式,为广大爱好者提供展示 ...
- vue移动端出现遮罩层时在遮罩层滑动时禁止遮罩层下方页面滑动
h5页面 点击出现弹框时 在遮罩层上面滑动时 下方的页面会出现滑动现象 解决方法 我知道的有以下两种 在遮罩层标签上添加@touchmove.prevent 把遮罩层显示时把下方的父盒子css设置为固 ...
- 使用Vue2+webpack+Es6快速开发一个移动端项目,封装属于自己的jsonpAPI和手势响应式组件
导语 最近看到不少使用vue制作的音乐播放器,挺好玩的,本来工作中也经常使用Vue,一起交流学习,好的话点个star哦 本项目特点如下 : 1. 原生js封装自己的跨域请求函数,支持promise调用 ...
- 写一个js向左滑动删除 交互特效的插件——Html5 touchmove
需求描述 需要实现类似QQ中对联系人的操作:向左滑动,滑出删除按钮.滑动超过一半时松开则自动滑到底,不到一半时松开则返回原处. 纯js实现 使用了h5的touchmove等事件,以及用js动态改变cs ...
- 弹出页面遮罩层,以及web端和移动端阻止遮罩层的滑动。
最近项目遇到了遮罩层的一些问题,总结一下: 弹出遮罩层 遮罩层弹出有非常多的方法,这里只写出本人用的代码,使用jq操作dom的方法进行实现的. <style>.box{position:a ...
- 移动端触摸滑动插件Swiper
移动端触摸滑动插件Swiper 04/02/2015 一.了解Swiper 目前移动端项目一般都需要具有触屏焦点图的效果,如果你也需要实现这一功能的话,Swiper是一个不错的选择. 1.他不需要加载 ...
- 移动端tab滑动和上下拉刷新加载
移动端tab滑动和上下拉刷新加载 查看demo(请在移动端模式下查看) 查看代码 开发该插件的初衷是,在做一个项目时发现现在实现移动端tab滑动的插件大多基于swiper,swiper的功能太强大而我 ...
- 根据bootstrap框架实现移动端触摸滑动的方法
有一个移动端的项目要求用jquery+bootstrap,其中有一个轮播图,需求是要求可以手触滑动,但是bootstrap中没有写手触滑动的方法,自己琢磨着写了出来,供大家参考. $(function ...
随机推荐
- Linux系统下分割tomcat日志
在Linux系统下,tomcat日志catalina.out并不会像window系统下,按日期进行重写备份,因此在Linux系统下会造成日志文件过大的情况,本文介绍采用 cronolog工具进行如在w ...
- hdoj 2040
#include<stdio.h>int i,j,s1,s2;int cha(int a,int b){ s1=0; s2=0; for(i=1;i<a;i++) { ...
- Android各种访问权限Permission详解
原文:http://jingyan.baidu.com/article/afd8f4de4688af34e386e976.html 在Android的设计中,资源的访问或者网络连接,要得到这些服务都需 ...
- spring mvc ModelAndView 404的原因
在使用ModelAndView时不要导入 import org.springframework.web.portlet.ModelAndView; 而要导入以下这个包 import org.sprin ...
- hiho一下103周 平衡树·Treap
平衡树·Treap 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? 小Ho:就是二 ...
- 访问Github过慢解决
在这个地址查找响应最快的地址:http://tool.chinaz.com/dns?type=1&host=assets-cdn.github.com&ip= 查找:assets-cd ...
- 转:几十种编程语言的快速入门教程- learnxinyminutes.com
原文来自于:http://top.jobbole.com/15551/ 这家网站的名称是 Learn X in Y minutes,包括了几十种编程语言的快速学习入门教程.打开几种编程语言来看了一下, ...
- 使用CSS3改变选中元素背景色
CSS3代码如下: /* SELECTION ----------------- */ ::-moz-selection { background: #f00533; color: white; te ...
- unity NGUI点击消息不传入到场景中去
unity NGUI点击消息不传入到场景中去 1.今天遇到的问题是点击NGUI的按钮,场景中也相应了这个消息 解决的办法是在场景中需要互动的时候,也就是在update中进行判断 是否是点击了NGUI按 ...
- unity3d 幻灯片效果实现
上一篇使用的是静态方式进行的加载,采用的数据结构为 数组 该篇文章则是使用动态加载的方式实现: this.objsOfRouses = Resources.LoadAll("images&q ...