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的区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]