Skip to content

图片 Image

用于展示图片资源的组件,支持懒加载、加载动画、加载失败兜底等能力。

基础用法

通过 src 属性设置图片地址,支持 widthheight 控制尺寸。

vue
<template>
  <bp-image
    width="300px"
    height="200px"
    src="https://cos.birdpaper.design/birdpaper-ui/v2/image-demo/img_1.jpg?imageMogr2/thumbnail/!80p"
    alt="示例图片"
  />
</template>

填充方式

通过 fit 属性设置图片的填充方式,与 CSS 的 object-fit 属性一致。支持 5 种方式:fill - 拉伸填充(默认)contain - 等比缩放包含cover - 等比缩放覆盖none - 原始尺寸scale-down - 取较小值

fill

contain

cover

none

scale-down

vue
<template>
  <div class="demo-area">
    <div class="fit-item" v-for="fit in fitTypes" :key="fit">
      <p>{{ fit }}</p>
      <bp-image
        width="80px"
        height="80px"
        :fit
        src="https://cos.birdpaper.design/birdpaper-ui/v2/image-demo/img_1.jpg?imageMogr2/thumbnail/!80p"
      />
    </div>
  </div>
</template>

<script setup lang="ts">
const fitTypes = ["fill", "contain", "cover", "none", "scale-down"];
</script>

<style lang="scss" scoped>
.demo-area {
  display: flex;
  gap: 16px;
  .fit-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;

    p {
      color: #8c8c8c;
      font-size: 13px;
    }
  }
}
</style>

加载失败

通过 fallback 属性设置加载失败时的兜底图片。也可以使用 error 插槽自定义错误展示内容。

vue
<template>
  <bp-space :size="16">
    <bp-image
      width="200px"
      height="150px"
      src="https://invalid-url/broken.jpg"
      fallback="https://cos.birdpaper.design/birdpaper-ui/v2/image-demo/img_1.jpg?imageMogr2/thumbnail/!80p"
    />
    <bp-image width="200px" height="150px" src="https://invalid-url/broken.jpg">
      <template #error>
        <div class="error-slot">
          <IconCloseCircleLine size="28" />
          <span>加载失败</span>
        </div>
      </template>
    </bp-image>
  </bp-space>
</template>

<script setup lang="ts">
import { IconCloseCircleLine } from "birdpaper-icon";
</script>

<style lang="scss" scoped>
.error-slot {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100%;
  color: #c9cdd4;
  gap: 4px;

  span {
    font-size: 12px;
  }
}
</style>

加载动画

通过 load-effect 属性设置图片加载完成时的动画效果。支持 3 种效果:fade - 渐显(默认)blur - 模糊过渡none - 无动画

fade

blur

none

vue
<template>
  <div class="demo-area">
    <div class="effect-item">
      <p>fade</p>
      <bp-image
        width="200px"
        height="140px"
        src="https://cos.birdpaper.design/birdpaper-ui/v2/image-demo/img_1.jpg?imageMogr2/thumbnail/!80p"
        load-effect="fade"
      />
    </div>
    <div class="effect-item">
      <p>blur</p>
      <bp-image
        width="200px"
        height="140px"
        src="https://cos.birdpaper.design/birdpaper-ui/v2/image-demo/img_1.jpg?imageMogr2/thumbnail/!80p"
        load-effect="blur"
      />
    </div>
    <div class="effect-item">
      <p>none</p>
      <bp-image
        width="200px"
        height="140px"
        src="https://cos.birdpaper.design/birdpaper-ui/v2/image-demo/img_1.jpg?imageMogr2/thumbnail/!80p"
        load-effect="none"
      />
    </div>
  </div>
</template>

<style lang="scss" scoped>
.demo-area {
  display: flex;
  gap: 16px;

  .effect-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;

    p {
      color: #8c8c8c;
      font-size: 13px;
    }
  }
}
</style>

Image 属性

src图片资源地址
String
--
alt图片替代文本
String
--
title图片标题
String
--
width图片宽度,支持 CSS 单位
String
--
height图片高度,支持 CSS 单位
String
--
fit图片填充方式,同 CSS object-fit
String
fill-
fallback加载失败时的兜底图片地址
String
--
lazy是否开启懒加载
Boolean
--
placeholder懒加载时的占位图片地址
String
--
load-effect图片加载完成的动画效果
String
fade-

Image 事件

load图片加载完成时触发ev: Event-
error图片加载失败时触发ev: Event-

Image 插槽

loading图片加载中的占位内容--
error图片加载失败的展示内容--