Skip to content

Image 图片

用于展示图片,并支持加载态、错误态、底部信息和预览。

何时使用

  • 展示图片缩略图、封面、附件预览或带标题说明的图片内容。
  • 需要提供单图预览、预览组切换、缩放、旋转或自定义预览操作时。
  • 需要在图片加载中、加载失败时提供明确反馈时。

基础用法

vue
<template>
  <x-image :src="imageSrc" width="160" height="120" fit="cover" alt="示例图片" />
</template>

<script setup lang="ts">
const imageSrc = '...';
</script>

适应方式

vue
<template>
  <x-image :src="imageSrc" width="120" height="90" fit="cover" title="cover" />
  <x-image :src="imageSrc" width="120" height="90" fit="contain" title="contain" />
  <x-image :src="imageSrc" width="120" height="90" fit="fill" title="fill" />
</template>

底部信息

vue
<template>
  <x-image
    :src="imageSrc"
    width="180"
    height="120"
    title="组件封面"
    description="底部信息覆盖在图片内部"
    fit="cover"
  />
  <x-image
    :src="imageSrc"
    width="180"
    height="120"
    title="外置说明"
    description="footerPosition 设置为 outer"
    footer-position="outer"
    fit="cover"
  />
</template>

加载和错误

vue
<template>
  <x-image :src="imageSrc" width="160" height="110" show-loader fit="cover" />
  <x-image src="/missing-image-demo.png" width="160" height="110" alt="图片加载失败" />
  <x-image src="/missing-image-demo.png" width="160" height="110">
    <template #error>
      <div class="image-error">无法加载图片</div>
    </template>
  </x-image>
</template>

受控预览

当前:已关闭
vue
<template>
  <x-button @click="previewVisible = true">打开预览</x-button>
  <x-image
    v-model:preview-visible="previewVisible"
    :src="imageSrc"
    width="180"
    height="120"
    fit="cover"
    @preview-visible-change="onPreviewVisibleChange"
  />
</template>

<script setup lang="ts">
import { ref } from 'vue';

const imageSrc = '...';
const previewVisible = ref(false);
const onPreviewVisibleChange = (visible: boolean) => {
  console.log('preview visible:', visible);
};
</script>

预览组

当前图片:1 / 3
vue
<template>
  <x-image-preview-group
    v-model:visible="visible"
    v-model:current="current"
    :src-list="images"
    infinite
    @change="onChange"
  >
    <x-image
      v-for="(item, index) in images"
      :key="item"
      :src="item"
      width="120"
      height="84"
      fit="cover"
      :title="`图片 ${index + 1}`"
    />
  </x-image-preview-group>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const visible = ref(false);
const current = ref(0);
const images = ['...', '...', '...'];
const onChange = (index: number) => {
  console.log('current image:', index);
};
</script>

自定义预览操作

vue
<template>
  <x-image :src="imageSrc" width="180" height="120" fit="cover">
    <template #preview-actions>
      <x-image-preview-action name="记录" @click="record">
        <span>记</span>
      </x-image-preview-action>
    </template>
  </x-image>
</template>

<script setup lang="ts">
const record = () => {
  console.log('custom preview action');
};
</script>

按需导入

ts
import { Image, ImagePreview, ImagePreviewGroup, ImagePreviewAction } from 'x-next';

Image Props

参数说明类型默认值
src图片地址string-
width图片宽度string | number-
height图片高度string | number-
title标题string-
description描述string-
fit图片适应方式'contain' | 'cover' | 'fill' | 'none' | 'scale-down'-
alt图片文字描述string-
hideFooter是否隐藏底部信息;传 'never' 时加载错误也显示 footerboolean | 'never'false
footerPosition底部信息位置'inner' | 'outer''inner'
showLoader是否显示加载中效果booleanfalse
preview是否开启预览booleantrue
previewVisible预览是否打开booleanundefined
defaultPreviewVisible默认是否打开预览booleanfalse
previewProps预览配置ImagePreviewProps-
footerClass底部区域类名string | array | object-
renderToBody预览是否挂载到 bodybooleantrue

Image Events

事件名说明回调参数
update:previewVisible预览显隐变化时触发visible: boolean
preview-visible-change预览显隐变化时触发visible: boolean

Image Slots

插槽名说明
error-icon自定义错误图标
error自定义错误内容
loader自定义加载内容
extra底部额外内容
preview-actions预览额外操作项

ImagePreview Props

参数说明类型默认值
src图片地址string-
visible是否显示预览booleanundefined
defaultVisible默认是否显示预览booleanfalse
maskClosable点击遮罩是否关闭booleantrue
closable是否显示关闭按钮booleantrue
actionsLayout操作项布局string[]['fullScreen', 'rotateRight', 'rotateLeft', 'zoomIn', 'zoomOut', 'originalSize']
popupContainer弹出层挂载容器string | HTMLElementdocument.body
escToClose是否支持 Esc 关闭booleantrue
wheelZoom是否支持滚轮缩放booleantrue
keyboard是否支持键盘控制booleantrue
defaultScale默认缩放比number1
zoomRate缩放速率number1.1

ImagePreview Events

事件名说明回调参数
update:visible预览显隐变化时触发visible: boolean
close点击关闭按钮、遮罩或按 Esc 关闭时触发-

ImagePreview Slots

插槽名说明
actions自定义额外操作项

ImagePreviewGroup Props

参数说明类型默认值
srcList图片列表;设置后不再收集子 Image 的图片信息string[]-
current当前图片下标numberundefined
defaultCurrent默认图片下标number0
infinite是否无限循环booleanfalse
visible是否显示预览booleanundefined
defaultVisible默认是否显示预览booleanfalse
maskClosable点击遮罩是否关闭booleantrue
closable是否显示关闭按钮booleantrue
actionsLayout操作项布局string[]['fullScreen', 'rotateRight', 'rotateLeft', 'zoomIn', 'zoomOut', 'originalSize']
popupContainer弹出层挂载容器string | HTMLElement-
renderToBody是否挂载到 bodybooleantrue

ImagePreviewGroup Events

事件名说明回调参数
change切换图片时触发index: number
update:current当前图片下标变化时触发index: number
visible-change预览显隐变化时触发visible: boolean
update:visible预览显隐变化时触发visible: boolean

ImagePreviewGroup Slots

插槽名说明
default图片列表内容
actions自定义额外操作项,插槽参数为 { url }

ImagePreviewAction Props

参数说明类型默认值
name操作项名称,会用于 tooltip 和可访问标签string-
disabled是否禁用booleanfalse

交互说明

  • 预览打开后支持鼠标拖拽图片、滚轮缩放图片。
  • keyboardtrue 时,Esc 关闭预览,左右方向键切换预览组,上下方向键缩放,Space 还原到原始大小。