如何使用vue slot创建一个模态框的实例代码


Posted in Javascript onMay 24, 2020

【1】遮罩层:承载内容,管理样式布局。

【2】内容层:控制遮罩层的显示与否。

遮罩层和内容区之间应该解耦。遮罩层和内容区之间应该解耦。遮罩层和内容区之间应该解耦。

遮罩层不依赖于内容区,内容是放置在遮罩层里的,至于内容区里的内容是什么,遮罩层完全不用在意。因此可以在遮罩层里采用插槽。

遮罩层的实现

<div class="common-mask" v-if="visible">
 <slot name="head"></slot>
 <slot name="body"></slot>
 <slot name="foot"></slot>
 </div>
<style scoped lang='scss'>
 .common-mask {
 position: fixed;
 top: 0;
 bottom: 0;
 left: 0;
 right: 0;
 background: rgba($color: #000000, $alpha: 0.75);
 display: flex;
 justify-content: center;
 align-content: center;
 z-index: 4;
 }
</style>

内容层的实现

<Vue-Modal :visible="visible">
 <div slot="head">head</div>
 <div slot="body">body</div>
 <div slot="foot">
 <button class="common-btn" @click="close">Close</button>
 </div>
 </Vue-Modal>

PS:vue组件模态框实现方式

// 组件代码

<template>
<div>
 <div class="dialog-modal"> <!-- 根元素,z-index 需要高于父容器其他元素 -->
  <div class="dialog-wrapper" @click="onClose" v-show="isShow"></div> <!-- 加载一个具有透明度的背景,使根元素透明,子元素会继承该透明度 -->
  <transition name="drop">
    <div class="dialog-container" v-show="isShow"> <!-- 模态框容器,z-index 需要高于背景 -->
      <span class="close-btn" @click="onClose">x</span>
      <slot>
        <p>hello</p>
      </slot>
    </div>
  </transition>
 </div>
</div>
</template>
<script>
  export default {
    props: {
      isShow:{
        type: Boolean,
        default: false
      }
    },
    methods: {
      onClose(){
        this.$emit('on-close');
      }
    }
  }
</script>
<style>
.drop-enter-active {
 transition: all .5s;
}
.drop-leave-active {
 transition: all .3s;
}
.drop-enter {
 transform: translateY(-500px);
}
.drop-leave-active {
 transform: translateY(-500px);
}  
 
  .dialog-modal{
    position: absolute;
    z-index: 5;
  }
  .dialog-wrapper
  {
    position: fixed;
    height: 100%;
    width: 100%;
    z-index: 5;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
   
  }
  .dialog-wrapper{
    background-color: #eee;
    opacity: .9;
  }
  .dialog-container{
    position: fixed;
    z-index:80;
    top: 10%;
    left: 25%;
    width: 50%;
    /* margin: 0 auto; */
    background-color: #eee;
    border-radius: 3px;
    box-shadow: 0 5px 15px rgba(0,0,0,.5);
  }
  span.close-btn{
    padding: 0 5px;
    float: right;
    cursor: pointer;
    font-size: 18px;
    font-weight: bold;
  }
</style>

// 组件使用

//导入模态对话框
import modal from './plugins/dialog'
// 在使用组件
<modal></modal>

<modal @on-close="closeThis('isShowLog')":is-show='isShowLog'><login></login></modal>

总结

到此这篇关于如何使用vue slot创建一个模态框的文章就介绍到这了,更多相关vue slot创建模态框内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
通过pjax实现无刷新翻页(兼容新版jquery)
Jan 31 Javascript
javascript实现动态标签云
Oct 16 Javascript
举例说明如何为JavaScript的方法参数设置默认值
Nov 17 Javascript
js剪切板应用clipboardData实例解析
May 29 Javascript
基于JavaScript代码实现自动生成表格
Jun 15 Javascript
如何判断出一个js对象是否一个dom对象
Nov 24 Javascript
js中字符型和数值型数字的互相转化方法(必看)
Apr 25 Javascript
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
原生js中ajax访问的实例详解
Sep 19 Javascript
js截取字符串功能的实现方法
Sep 27 Javascript
VueJS 组件参数名命名与组件属性转化问题
Dec 03 Javascript
24行JavaScript代码实现Redux的方法实例
Nov 17 Javascript
使用React代码动态生成栅格布局的方法
May 24 #Javascript
ES6对象操作实例详解
May 23 #Javascript
ES6函数和数组用法实例分析
May 23 #Javascript
ES6箭头函数和扩展实例分析
May 23 #Javascript
ES6新增的数组知识实例小结
May 23 #Javascript
ES6扩展运算符和rest运算符用法实例分析
May 23 #Javascript
JavaScript组合设计模式--改进引入案例分析
May 23 #Javascript
You might like
在PHP中利用XML技术构造远程服务(上)
2006/10/09 PHP
PHP静态新闻列表自动生成代码
2007/06/14 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
2017/06/09 PHP
js实现的网页颜色代码表全集
2007/07/17 Javascript
Jquery 常用方法经典总结
2010/01/28 Javascript
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
[06:24]DOTA2亚洲邀请赛小组赛第三日 TOP10精彩集锦
2015/02/01 DOTA
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
经典c++面试题四
2015/05/14 面试题
三好学生自我鉴定
2013/12/17 职场文书
员工考核管理制度
2014/02/02 职场文书
论文指导教师评语
2014/04/28 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
公司承诺函范文
2015/01/21 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫
pandas中pd.groupby()的用法详解
2022/06/16 Python