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 表单规则集合对象
Jul 21 Javascript
js 调用父窗口的具体实现代码
Jul 15 Javascript
javascript使用onclick事件改变选中行的颜色
Dec 30 Javascript
JavaScript中的Primitive对象封装介绍
Dec 31 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
Jul 27 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
Oct 22 Javascript
js前端解决跨域问题的8种方案(最新最全)
Nov 18 Javascript
vue数据双向绑定原理解析(get &amp; set)
Mar 08 Javascript
vue计算属性get和set用法示例
Feb 08 Javascript
JavaScript 性能提升之路(推荐)
Apr 10 Javascript
javascript实现多边形碰撞检测
Oct 24 Javascript
详解datagrid使用方法(重要)
Nov 06 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
BBS(php &amp; mysql)完整版(四)
2006/10/09 PHP
php中的时间显示
2007/01/18 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
js实现简单的星级选择器提交效果适用于评论等
2013/10/18 Javascript
JavaScript中的setMilliseconds()方法使用详解
2015/06/11 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
nodejs读写json文件的简单方法(必看)
2017/03/09 NodeJs
通过构造函数实例化对象的方法
2017/06/28 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
python MNIST手写识别数据调用API的方法
2018/08/08 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
static关键字的用法
2013/10/07 面试题
简单的大学生自我鉴定
2014/02/18 职场文书
个人投资计划书
2014/05/01 职场文书
健康状况证明模板
2014/10/23 职场文书
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript