<template> 
 | 
    <u-transition 
 | 
        :show="show" 
 | 
        custom-class="u-overlay" 
 | 
        :duration="duration" 
 | 
        :custom-style="overlayStyle" 
 | 
        @click="clickHandler" 
 | 
    > 
 | 
        <slot /> 
 | 
    </u-transition> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
    import props from './props.js'; 
 | 
  
 | 
    /** 
 | 
     * overlay 遮罩 
 | 
     * @description 创建一个遮罩层,用于强调特定的页面元素,并阻止用户对遮罩下层的内容进行操作,一般用于弹窗场景 
 | 
     * @tutorial https://www.uviewui.com/components/overlay.html 
 | 
     * @property {Boolean}            show        是否显示遮罩(默认 false ) 
 | 
     * @property {String | Number}    zIndex        zIndex 层级(默认 10070 ) 
 | 
     * @property {String | Number}    duration    动画时长,单位毫秒(默认 300 ) 
 | 
     * @property {String | Number}    opacity        不透明度值,当做rgba的第四个参数 (默认 0.5 ) 
 | 
     * @property {Object}            customStyle    定义需要用到的外部样式 
 | 
     * @event {Function} click 点击遮罩发送事件 
 | 
     * @example <u-overlay :show="show" @click="show = false"></u-overlay> 
 | 
     */ 
 | 
    export default { 
 | 
        name: "u-overlay", 
 | 
        mixins: [uni.$u.mpMixin, uni.$u.mixin,props], 
 | 
        computed: { 
 | 
            overlayStyle() { 
 | 
                const style = { 
 | 
                    position: 'fixed', 
 | 
                    top: 0, 
 | 
                    left: 0, 
 | 
                    right: 0, 
 | 
                    zIndex: this.zIndex, 
 | 
                    bottom: 0, 
 | 
                    'background-color': `rgba(0, 0, 0, ${this.opacity})` 
 | 
                } 
 | 
                return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle)) 
 | 
            } 
 | 
        }, 
 | 
        methods: { 
 | 
            clickHandler() { 
 | 
                this.$emit('click') 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
    @import "../../libs/css/components.scss"; 
 | 
     $u-overlay-top:0 !default; 
 | 
     $u-overlay-left:0 !default; 
 | 
     $u-overlay-width:100% !default; 
 | 
     $u-overlay-height:100% !default; 
 | 
     $u-overlay-background-color:rgba(0, 0, 0, .7) !default; 
 | 
    .u-overlay { 
 | 
        position: fixed; 
 | 
        top:$u-overlay-top; 
 | 
        left:$u-overlay-left; 
 | 
        width: $u-overlay-width; 
 | 
        height:$u-overlay-height; 
 | 
        background-color:$u-overlay-background-color; 
 | 
    } 
 | 
</style> 
 |