vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍


Posted in Javascript onSeptember 29, 2018

vue如何简单的实现弹框,遮罩,点击其他区域关闭弹框, 简单的思路是以一个div作为遮罩, 控制其的v-if(v-show)即可, 掌握到技巧既可以任意扩展。

v-if 是直接删除dom节点, 就是这个div就不存在了

v-show 是控制dom的css样式设置为 display: none; 来实现,dom还是存在;

实现如下

maskshow来控制控制遮罩的显示隐藏,绑定一个时间点击遮罩的时候关闭它

<div class="mask" v-show="maskShow" @click="setMaskShow">
</div>

有一个弹框它的显示和遮罩一样,里面有个关闭按钮也可以关闭弹框,函数里只需要将maskShow值取反即可

<div class="child" v-show="maskShow">
 <button @click="setMaskShow">关闭</button>
</div>

其他方法

点击时候触发该方法, 判断点的区域

hidePanel(event) {
  let dom = document.getElementById("child");
  if (dom) {
    if (!dom.contains(event.target)) {
    //这句是说如果我们点击到了id为child以外的区域
      this.maskShow = false;
    }
  }
}

全部代码如下

<template>
  <div class="father">
    <div class="mask" v-show="maskShow" @click="setMaskShow"></div>
    <div class="child" id="child" v-show="maskShow">
      <button @click="setMaskShow">关闭</button>
    </div>
    <button @click="setMaskShow">click</button>
  </div>
</template>

<script>
export default {
  data: function(){
    return {
      maskShow: false,
    }
  },
  methods: {
    setMaskShow(){
      this.maskShow = !this.maskShow;
    }
  }
}
</script>

<style>
.father{
  width: 100%;
  height: 100%;
}
.mask{
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
  background: #000;
  opacity: 0.3;
}
button{
  width: 100px;
  height: 40px;
  line-height: 40px;
  text-align: center;
}
.child{
  position: fixed;
  width: 400px;
  height: 400px;
  border: 1px solid #ccc;
  text-align: center;
  line-height: 400px;
  top: calc(50% - 200px);
 left: calc(50% - 200px);
  background: #fff;
}
</style>

下面谈谈 Vue.js 里 v-if 与 v-show 的区别

 在 Vue 项目中,v-if 和 v-show 算是两个用得很频繁的指令,很巧的是它俩在表现上也相似,都是动态显示 DOM 元素。不过既然是两个不同指令,肯定会有不同的适用场景,带着好奇,让我们在 Vue 官方文档里一探究竟吧~

对于v-if大家应该不会陌生,不管哪种编程语言都会有 if-else 的流程控制。
例如,在 Java 中:

if (condition) {
  //some code here
} else {
  //some code here, too
}

当然在 Vue.js 中,v-if 也是执行这样的功能。稍有不同的是在 template 中用 v-if 条件渲染一整组,类似地,同时也可使用 v-else 指令来表示 v-if 的 “else块”:

<div v-if="Math.random() > 0.5">
Now you see me
</div>
<div v-else>
Now you don't
</div>

另一个用于根据条件展示元素的选项是 v-show 指令,用法大致一样:

<h1 v-show=true>Hello!</h1>

不同的是带有 v-show 的元素始终会被渲染并保留在 DOM 中。v-show 只是简单地切换元素的 display 属性。
看到这里大家应该对 v-if 与 v-show 的区别有一个简单的概念了。

接下来将会为大家详细介绍两者的不同:

v-if 是”真正的”条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
同时 v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。 

所以一般来说,v-if 具有更高的切换开销,而 v-show 具有更高的初始渲染开销。

因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件不太可能改变,则使用 v-if 更好。

总结

以上所述是小编给大家介绍的vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
可实现多表单提交的javascript函数
Aug 01 Javascript
js获取单元格自定义属性值的代码(IE/Firefox)
Apr 05 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
Apr 15 Javascript
jquery实现类似淘宝星星评分功能实例
Sep 12 Javascript
JS打开新窗口防止被浏览器阻止的方法
Jan 03 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
Jun 21 Javascript
jQuery使用deferreds串行多个ajax请求
Aug 22 Javascript
JQueryEasyUI之DataGrid数据显示
Nov 23 Javascript
JavaScript编写一个贪吃蛇游戏
Mar 09 Javascript
JS实现百度网盘任意文件强制下载功能
Aug 31 Javascript
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
微信打开网址添加在浏览器中打开提示的办法
May 20 Javascript
vue使用v-for实现hover点击效果
Sep 29 #Javascript
vue 利用路由守卫判断是否登录的方法
Sep 29 #Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
Sep 29 #Javascript
在vue中v-bind使用三目运算符绑定class的实例
Sep 29 #Javascript
iview同时验证多个表单问题总结
Sep 29 #Javascript
浅谈关于iview表单验证的问题
Sep 29 #Javascript
Vue路由history模式解决404问题的几种方法
Sep 29 #Javascript
You might like
PHP4实际应用经验篇(7)
2006/10/09 PHP
hadoop中一些常用的命令介绍
2013/06/19 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
curl和libcurl的区别简介
2015/07/01 PHP
详谈PHP编码转换问题
2015/07/28 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
让Python代码更快运行的5种方法
2015/06/21 Python
Python set常用操作函数集锦
2017/11/15 Python
Django权限机制实现代码详解
2018/02/05 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
python中使用PIL制作并验证图片验证码
2018/03/15 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
python3中for循环踩过的坑记录
2020/12/14 Python
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
奇怪的鱼:Weird Fish
2018/03/18 全球购物
部门年终奖分配方案
2014/05/07 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python
在redisCluster中模糊获取key方式
2021/07/09 Redis
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers