vue定义模态框
xiaodunmeng 人气:0<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; } } }
自定义模态框弹出框的大小位置及动画
加载全部内容