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 相关文章推荐
jQuery 处理表单元素的代码
Feb 15 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
Nov 26 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
May 27 Javascript
jQuery使用正则表达式限制文本框只能输入数字
Jun 18 Javascript
JavaScipt选取文档元素的方法(推荐)
Aug 05 Javascript
原生js实现轮播图
Feb 27 Javascript
JavaScript表单验证完美代码
Mar 02 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
Aug 23 Javascript
vue中关闭eslint的方法分析
Aug 04 Javascript
AngularJS 多指令Scope问题的解决
Oct 25 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
Nov 06 Javascript
小程序分页实践之编写可复用分页组件
Jul 18 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
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
2010/02/09 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
jquery自定义插件——window的实现【示例代码】
2016/05/06 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
python正则分析nginx的访问日志
2017/01/17 Python
Python continue继续循环用法总结
2018/06/10 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
《日月潭》教学反思
2014/02/28 职场文书
公司司机岗位职责范本
2014/03/03 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android