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 相关文章推荐
js批量设置样式的三种方法不推荐使用with
Feb 25 Javascript
让js弹出窗口居前显示的实现方法
Jul 10 Javascript
javascript从右边截取指定字符串的三种实现方法
Nov 29 Javascript
js实现网页收藏功能
Dec 17 Javascript
javascript HTML5文件上传FileReader API
Mar 27 Javascript
使用jquery提交form表单并自定义action的方法
May 25 Javascript
JS for...in 遍历语句用法实例分析
Aug 24 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
Mar 02 Javascript
AngularJS表格样式简单设置方法示例
Mar 03 Javascript
详谈js原型继承的一些问题
Sep 06 Javascript
JavaScript闭包原理与用法实例分析
Aug 10 Javascript
彻底揭秘keep-alive原理(小结)
May 05 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
根德YB400的电路分析
2021/03/02 无线电
如何使用PHP计算上一个月的今天
2013/05/23 PHP
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
jquery的ajax请求全面了解
2013/03/20 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
Python遍历指定文件及文件夹的方法
2015/05/09 Python
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
django批量导入xml数据
2016/10/16 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
pycharm 安装JPype的教程
2019/08/08 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
如何实现一个python函数装饰器(Decorator)
2020/10/12 Python
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
清洁工表扬信
2014/01/08 职场文书
幼儿园教师的考核评语
2014/04/18 职场文书
汽车专业求职信
2014/06/05 职场文书
英语课外活动总结
2014/08/27 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
排查MySQL生产环境索引没有效果
2022/04/11 MySQL
纯CSS打字动画的实现示例
2022/08/05 HTML / CSS