vue定义模态框的方法

 更新时间:2022年07月05日 09:52:24   作者:xiaodunmeng  
这篇文章主要为大家详细介绍了vue定义模态框的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了vue定义模态框的具体代码,供大家参考,具体内容如下

<template>
<transition name="slide">
    <div class="modal" v-show="showModal">
      <div class="mask"></div>
      <div class="modal-dialog">
        <div class="modal-header">
          <span>{{title}}</span>
          <a href="javascript:;" class="icon-close" v-on:click="$emit('cancel')"></a>
        </div>
        <div class="modal-body">
          <slot name="body"></slot>
        </div>
        <div class="modal-footer">
          <a href="javascript:;" class="btn" v-if="btnType===1" v-on:click="$emit('submit')">{{sureText}}</a>
          <a href="javascript:;" class="btn" v-if="btnType===2" v-on:click="$emit('cancel')">{{cancelText}}</a>
          <div class="btn-group" v-if="btnType===3">
            <a href="javascript:;" class="btn" v-if="btnType===1" v-on:click="$emit('submit')">{{sureText}}</a>
            <a href="javascript:;" class="btn" v-if="btnType===2" v-on:click="$emit('cancel')">{{cancelText}}</a>
          </div>
        </div>
      </div>
    </div>
  </transition>
</template>
 
<script>
export default {
  name: 'modal',
  props: {
    // 弹窗类型  小small 中middle 打large 表单form
    modalType: {
      type: String,
      default: 'form'
    },
    title: String,
    // 按钮类型1确定 2取消 3确定取消
    btnType: String,
    sureText: {
      type: String,
      default: '确定'
    },
    cancelText: {
      type: String,
      default: '取消'
    },
    showModal: Boolean
  }
}
</script>
 
<style lang="scss">
@import '../assets/scss/config.scss';
@import '../assets/scss/modal.scss';
@import '../assets/scss/mixin.scss';
</style>

modal.scss

@import './mixin.scss';
.modal {
  @include position(fixed);
  z-index: 30;
  transition: all .5s;
  .mask {
    @include position(fixed);
    background-color: $colorI;
    opacity: 0.5;
  }
  &.slide-enter-active {
    top: 0;
  }
  &.slide-leave-active {
    top: -100%;
  }
  &.slide-enter {
    top: -100%;
  }
  .modal-dialog {
    @include position(absolute,40%,50%,660px,auto);
    background-color: $colorG;
    transform: translate(-50%,-50%);
    .modal-header {
      height: 60px;
      background-color: $colorJ;
      padding: 0 25px;
      line-height: 60px;
      font-size: $fontI;
      .icon-close {
        @include positionImg(absolute,23px,25px,14px,14px,'/imgs/icon-close.png');
        transition: transform .3s;
        &:hover {
          transform: scale(1.5);
        }
      }
    }
    .modal-body {
      padding: 42px 40px 54px;
      font-size: 14px;
    }
    .modal-footer {
      height: 82px;
      line-height: 82px;
      text-align: center;
      background-color: $colorJ;
    }
  }
}
@mixin flex($hov:space-between, $col: center) {
  display: flex;
  justify-content: $hov;
  align-items: $col;
}
 
@mixin bgImg($w:0, $h:0, $img:'', $size:contain) {
  display: inline-block;
  width: $w;
  height: $h;
  background: url($img) no-repeat center;
  background-size: $size;
}
 
@mixin positionImg($pos:absolute,$top:0,$right:0,$w:0, $h:0, $img:'', $size:contain) {
  position: $pos;
  top: $top;
  right: $right;
  width: $w;
  height: $h;
  background: url($img) no-repeat center;
  background-size: $size;
}
 
@mixin position($pos:absolute,$top:0,$left:0,$w:100%,$h:100%) {
  position: $pos;
  top: $top;
  left: $left;
  width: $w;
  height: $h;
}

要引用的

<modal
      title="提示"
      sureText="查看购物车"
      :btnType="1"
      modalType="middle"
      v-bind:showModal="showModal"
      v-on:submit="goToCart"
      v-on:cancel="showModal=false"
    >
    <template v-slot:body>
      <p>商品添加成功!</p>
    </template>
    </modal>
 
 
data() {
    return {
        isModal:false
    }
}

button.scss

@import './config.scss';
.btn {
  display: inline-block;
  width: 110px;
  line-height: 30px;
  text-align: center;
  background-color: $colorA;
  color: $colorG;
  border: none;
  cursor: pointer;
}
 
.btn-default {
  background-color: #b0b0b0;
  color: $colorG;
}
.btn-large {
  width: 202px;
  height: 50px;
  line-height: 50px;
  font-size: 18px;
}
.btn-huge {
  width: 300px;
  height: 54px;
  line-height: 54px;
  font-size: 18px;
}
.btn-group {
  .btn {
    margin-right: 20px;
    &:last-child {
      margin-right: 0;
    }
  }
}

自定义模态框弹出框的大小位置及动画

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Vue实现首页banner自动轮播效果

    Vue实现首页banner自动轮播效果

    这篇文章主要为大家详细介绍了Vue实现首页banner自动轮播效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • vue实现百度搜索下拉提示功能实例

    vue实现百度搜索下拉提示功能实例

    这篇文章主要介绍了vue实现百度搜索下拉提示功能实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • vue项目中使用scss详细方法步骤

    vue项目中使用scss详细方法步骤

    这篇文章主要给大家介绍了关于vue项目中使用scss的详细方法步骤,scss是一种css预处理语言,定义了一种新的专门的编程语言,编译后形成正常的css文件,为css增加一些编程特性,无需考虑浏览器的兼容性,让css更加简洁、适应性更强,可读性更佳,需要的朋友可以参考下
    2023-11-11
  • 前端在el-dialog中嵌套多个el-dialog代码实现

    前端在el-dialog中嵌套多个el-dialog代码实现

    最近使用vue+elementUI做项目,使用过程中很多地方会用到dialog这个组件,有好几个地方用到了dialog的嵌套,下面这篇文章主要给大家介绍了关于前端在el-dialog中嵌套多个el-dialog代码实现的相关资料,需要的朋友可以参考下
    2024-01-01
  • Vue过滤器filters如何使用

    Vue过滤器filters如何使用

    Vue过滤器filters用于一些常见的文本格式化,通过过滤器可以进行处理成自己想要展示出来的格式,由“管道”符号指示,本文给大家介绍Vue过滤器filters使用方式,感兴趣的朋友一起看看吧
    2023-10-10
  • vue路由跳转到新页面实现置顶

    vue路由跳转到新页面实现置顶

    这篇文章主要介绍了vue路由跳转到新页面实现置顶问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • vue中各选项及钩子函数执行顺序详解

    vue中各选项及钩子函数执行顺序详解

    今天小编就为大家分享一篇vue中各选项及钩子函数执行顺序详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 基于Vue.js的表格分页组件

    基于Vue.js的表格分页组件

    这篇文章主要为大家详细介绍了基于Vue.js的表格分页组件使用方法,了解了Vue.js的特点,感兴趣的朋友可以参考一下
    2016-05-05
  • vue3通过ref获取子组件defineExpose的数据和方法

    vue3通过ref获取子组件defineExpose的数据和方法

    defineExpose是Vue3中新增的选项,用于向父组件暴露子组件内部的属性和方法,通过defineExpose,子组件可以主动控制哪些属性和方法可以被父组件访问,本文主要介绍了vue3通过ref获取子组件defineExpose的数据和方法,需要的朋友可以参考下
    2023-10-10
  • element ui动态侧边菜单栏及页面布局实现方法

    element ui动态侧边菜单栏及页面布局实现方法

    后台管理系统经常会使用到一个左侧菜单栏,右侧Tab页的页面显示结构,这篇文章主要给大家介绍了关于element ui动态侧边菜单栏及页面布局实现的相关资料,需要的朋友可以参考下
    2023-09-09

最新评论