<template> <view class="tm-maskFlow" :style="{ width:width+'px', height:height+'px' }" v-if="show"> <tm-translate @start="$emit('start')" :duration="duration" :wait="0" :animation-name="aniName"> <view @click.stop="closeMask" class="tm-maskFlow-mask" :style="{ background:bgColor, width:width+'px', height:height+'px' }"></view> <view @click.stop="closeMask" class="tm-maskFlow-body flex-center"> <view @click.stop=""> <slot></slot> </view> </view> </tm-translate> </view> </template> <script> /** * 黑色遮罩 * @property {String} bg-color = [rgba(0,0,0,0.35)] 默认:rgba(0,0,0,0.35),背景颜色值。 * @property {Boolean} close = [] 默认:true,点击遮罩是否关闭。 * @property {Boolean} blur = [] 默认:true,是否显示模糊背景。 * @property {Boolean} value = [] 默认:false,推荐使用value.sync或者v-model,来控制显示和关闭。 * @property {Function} change 和v-model同步,显示 和隐藏时触发,返回当前变化 参数true显示,false关闭。 * @example <tm-maskFlow v-model="show"></tm-maskFlow> */ import tmTranslate from "@/tm-vuetify/components/tm-translate/tm-translate.vue" export default { components:{tmTranslate}, name: 'tm-maskFlow', model: { prop: "value", event: 'input' }, props: { bgColor: { type: String, default: 'rgba(0,0,0,0.35)' }, close: { type: Boolean, default: true }, value: { type: Boolean, default: false }, duration:{ type:Number, default:300 }, blur:{ type:Boolean|String, default:true, } }, data() { return { width: 0, height: 0, aniName: 'fadeIn' }; }, created() { let syinfo = uni.getSystemInfoSync(); this.width = syinfo.screenWidth; this.height = syinfo.screenHeight; }, watch:{ show:function(){ this.$emit("input", this.value) this.$emit("change", this.value) this.$emit("update:value", this.value) } }, computed: { show: { get: function() { return this.value; }, set: function(val) { this.$emit("input", val) this.$emit("change", val) this.$emit("update:value", val) }, } }, methods: { closeMask() { if (!this.close) return; this.show = false; } }, } </script> <style lang="scss" scoped> .tm-maskFlow { position: fixed; left: 0; top: 0; z-index: 500; .tm-maskFlow-mask { left: 0; top: 0; width: 100%; height: 100%; .blur{ backdrop-filter:blur(3px); } } .tm-maskFlow-body { position: absolute; left: 0; top: 0; width: 100%; height: 100%; overflow-y: auto; } } </style>