Skip to content

Image 图片

Image 用于展示图片内容,在保留原生 img 特性的基础上,支持懒加载、自定义占位、加载失败回退和大图预览。VISTA B 直接使用 Element Plus 的 el-imageel-image-viewer

基础用法

通过 fit 设置图片如何适应容器,取值与原生 CSS object-fit 一致。

fill
contain
cover
none
scale-down
vue
<el-image
  style="width: 100px; height: 100px"
  :src="url"
  fit="cover"
/>

占位内容

通过 placeholder 插槽可以自定义图片加载中的占位内容。

Default
Custom
Loading...
vue
<el-image :src="src">
  <template #placeholder>
    <div class="image-slot">Loading...</div>
  </template>
</el-image>

加载失败

通过 error 插槽自定义缩略图加载失败时的内容;通过 viewer-error 插槽自定义预览大图加载失败时的内容。

vue
<el-image src="https://empty">
  <template #error>
    <div class="image-slot">
      <el-icon><IconPicture /></el-icon>
    </div>
  </template>
</el-image>

懒加载

设置 lazy 后,图片滚动到可视范围内才会加载。也可以使用浏览器原生 loading="lazy" 作为加载策略。

vue
<el-image v-for="url in urls" :key="url" :src="url" lazy />
<el-image :src="url" loading="lazy" />

图片预览

通过 preview-src-list 开启大图预览。initial-index 用于设置预览时默认打开的图片索引。

未操作
vue
<el-image
  :src="url"
  :preview-src-list="srcList"
  :initial-index="4"
  show-progress
  fit="cover"
/>

手动打开预览

组件暴露 showPreview 方法,可通过按钮手动打开预览;也可以直接使用 el-image-viewer 进行受控展示。

vue
<script setup>
import { ref } from 'vue'

const imageRef = ref()

const openPreview = () => {
  imageRef.value?.showPreview()
}
</script>

<template>
  <el-button @click="openPreview">open preview</el-button>
  <el-image ref="imageRef" :src="url" :preview-src-list="srcList" />
</template>

自定义工具栏

通过 toolbar 插槽可以自定义预览工具栏内容。插槽提供 actionsprevnextresetactiveIndexsetActiveItem

vue
<el-image :src="url" :preview-src-list="srcList">
  <template #toolbar="{ actions, prev, next, reset }">
    <el-icon @click="prev"><Back /></el-icon>
    <el-icon @click="next"><Right /></el-icon>
    <el-icon @click="actions('zoomIn')"><ZoomIn /></el-icon>
    <el-icon @click="reset"><Refresh /></el-icon>
  </template>
</el-image>

自定义进度条

通过 progress 插槽可以自定义预览时的进度内容。使用该插槽时,内容优先级高于 show-progress

vue
<el-image :src="url" :preview-src-list="srcList">
  <template #progress="{ activeIndex, total }">
    <span>{{ activeIndex + 1 }} / {{ total }}</span>
  </template>
</el-image>

API

Image 属性

属性说明类型默认值
src图片源地址,同原生属性一致string''
fit图片如何适应容器fill / contain / cover / none / scale-down / ''''
hide-on-click-modal开启预览时,是否可以点击遮罩层关闭预览booleanfalse
loading浏览器加载图像的策略eager / lazy
lazy是否使用懒加载booleanfalse
scroll-container懒加载监听滚动事件的容器string / HTMLElement
alt原生 alt 属性string
referrerpolicy原生 referrerpolicy 属性string
crossorigin原生 crossorigin 属性anonymous / use-credentials / ''
preview-src-list开启图片预览功能string[][]
z-index设置图片预览的 z-indexnumber
initial-index初始预览图片索引,小于 preview-src-list 的长度number0
close-on-press-escape是否可以通过 ESC 关闭 Image Viewerbooleantrue
preview-teleportedImage Viewer 是否插入至 bodybooleanfalse
infinite是否可以无限循环预览booleantrue
zoom-rate图片预览缩放速率number1.2
scale预览图片缩放比例number1
min-scale图片预览最小缩放比例number0.2
max-scale图片预览最大缩放比例number7
show-progress是否在预览图片时显示进度booleanfalse

Image 事件

事件名说明类型
load图片加载成功时触发(event: Event) => void
error图片加载失败时触发(event: Event) => void
switch切换预览图片时触发(index: number) => void
close关闭预览时触发() => void
showViewer 显示时触发() => void

Image 插槽

插槽说明
placeholder图片尚未加载时的自定义占位内容
error图片加载失败时的自定义内容
viewer大图预览中的自定义内容
progress大图预览中的自定义进度内容
toolbar大图预览中的自定义工具栏内容
viewer-error大图预览加载失败时的自定义内容

Image 方法

方法名说明类型
showPreview手动打开大图预览() => void

Image Viewer 属性

属性说明类型默认值
url-list用于预览的图片链接列表string[][]
z-index预览遮罩层的 z-indexnumber / string
initial-index初始预览图片索引,小于 url-list 的长度number0
infinite是否可以无限循环预览booleantrue
hide-on-click-modal是否可以点击遮罩层关闭预览booleanfalse
teleportedImage Viewer 是否插入至 bodybooleanfalse
zoom-rate图片预览缩放速率number1.2
scale预览图片缩放比例number1
min-scale图片预览最小缩放比例number0.2
max-scale图片预览最大缩放比例number7
close-on-press-escape是否可以通过 ESC 关闭 Image Viewerbooleantrue
show-progress是否显示预览图片的进度内容booleanfalse

Image Viewer 事件

事件名说明类型
close关闭预览时触发() => void
error图片加载失败时触发(event: Event) => void
switch切换预览图片时触发(index: number) => void
rotate旋转图片时触发(deg: number) => void

Image Viewer 插槽

插槽说明
default自定义预览内容
progress自定义进度内容
toolbar自定义工具栏内容
viewer-error自定义图片加载失败内容

Image Viewer 方法

方法名说明类型
setActiveItem手动切换图片(index: number) => void

使用提醒

业务图片建议始终补充 alt,重要图片需要设置加载失败兜底内容。大图预览适合查看同一组图片,预览列表应保持同类内容,避免把不同业务含义的图片混在一个 Viewer 中。

HOMEVISTA 设计规范