Skip to content
本页目录

Overlay 遮罩层

创建一个遮罩层,用于强调特定的页面元素,并阻止用户进行其他操作。

代码示例

基础使用(visible)

  • 遮罩层的显示与否通过 v-model:visible 进行双向绑定。
  • 使用 z-index 属性设置层级,可以解决被页面其他元素遮挡的情况,默认值为100
  • 可以在遮罩层上通过 @click.self 绑定点击事件来实现关闭遮罩层的功能。其中 .self 是保证只在点击遮罩层元素本身时才会触发绑定的事件,而点击其内部嵌入的子元素时不触发该事件。
查看代码
vue
<template>
  <div>
    <bf-button status="normal" @click="showOverlay">显示遮罩层</bf-button>

    <bf-overlay v-model:visible="visible" :z-index="100" @click.self="hideOverlay"></bf-overlay>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import { BfButton, BfOverlay } from '@bf-teams/bfui-vue';

// data
const visible = ref(false)

// methods
const showOverlay = () => {
  visible.value = true
}
const hideOverlay = () => {
  visible.value = false
}
</script>

背景模糊(blur)

通过 blur 属性设置遮罩层背景滤镜的模糊度(单位是 px),默认值为 0,即不模糊。

查看代码
vue
<template>
  <div>
    <bf-button status="normal" @click="showOverlay">模糊滤镜</bf-button>

    <bf-overlay v-model:visible="visible" :blur="2" @click.self="hideOverlay"></bf-overlay>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import { BfButton, BfOverlay } from '@bf-teams/bfui-vue';

// data
const visible = ref(false)

// methods
const showOverlay = () => {
  visible.value = true
}
const hideOverlay = () => {
  visible.value = false
}
</script>

使用插槽(slot)

  • 通过 center 插槽 <template v-slot:center></template> 可以嵌入居中元素和内容。
  • 不想元素居中的话,可以直接通过 default 默认插槽在遮罩层上嵌入任意内容,并自行定义样式,一般用于封装其他反馈组件。
查看代码
vue
<template>
  <div>
    <bf-button status="normal" @click="showOverlay1">center插槽</bf-button>
    <bf-button status="normal" @click="showOverlay2">默认插槽</bf-button>

    <bf-overlay v-model:visible="visible1" :z-index="100" @click.self="hideOverlay1">
      <template v-slot:center>
        <div style="padding: 20px; background: white; color: black; border-radius: 10px;">
          通过center插槽嵌入居中内容
        </div>
      </template>
    </bf-overlay>

    <bf-overlay v-model:visible="visible2" :z-index="100" @click.self="hideOverlay2">
      <template #default>
        <div style="padding: 20px; background: white; color: black;">
          通过 default 插槽嵌入任意内容,自行定义样式
        </div>
      </template>
    </bf-overlay>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import { BfButton, BfOverlay } from '@bf-teams/bfui-vue';

// data
const visible1 = ref(false)
const visible2 = ref(false)

// methods
const showOverlay1 = () => {
  visible1.value = true
}
const hideOverlay1 = () => {
  visible1.value = false
}
const showOverlay2 = () => {
  visible2.value = true
}
const hideOverlay2 = () => {
  visible2.value = false
}
</script>

TIP

具名插槽有对应的简写形式,如 <template v-slot:default> 可以简写为 <template #default>

vue
<bf-overlay v-model:visible="visible2" :z-index="100" @click.self="hideOverlay2">
  <template #default>
    <div style="padding: 20px; background: white; color: black;">
      通过 default 插槽嵌入任意内容,自行定义样式
    </div>
  </template>
</bf-overlay>

由于所有位于顶级的非 <template> 节点都被隐式地视为默认插槽的内容。所以使用默认 default 插槽可以不使用 <template> 标签包裹自定义元素,即下方写法的渲染效果相同:

vue
<bf-overlay v-model:visible="visible2" :z-index="100" @click.self="hideOverlay2">
  <!-- 隐式的默认插槽 -->
  <div style="padding: 20px; background: white; color: black;">
    通过 default 插槽嵌入任意内容,自行定义样式
  </div>
</bf-overlay>

API

Overlay Props

属性 Attribute说明 Description类型 Type默认值 Default
visible控制遮罩层是否显示Booleanfalse
blur设置遮罩层模糊度,单位是 pxNumber0

Overlay Slots

插槽 Slot说明 Description
center嵌入的元素自动居中
default默认插槽,用于自定义元素和样式

根据MIT许可证发布