跳转到内容

Image 图片

何时使用

  • 需要展示图片时使用。
  • 加载显示大图或加载失败时容错处理。

代码演示

基本用法

loading

容错处理

loading

渐进加载

loading

多张图片预览

loading

相册模式

loading

自定义预览图片

loading

受控的预览

loading

自定义预览内容

loading

预览遮罩

loading

嵌套

loading

API

Image

参数说明类型默认值版本
alt图像描述string-
classNames自定义语义化结构类名[Record<SemanticDOM, string>]-
fallback加载失败容错地址string-
height图像高度string | number-
placeholder加载占位,为 true 时使用默认占位VNode-
preview预览参数,为 false 时禁用boolean | PreviewTypetrue
src图片地址string-
styles自定义语义化结构样式[Record<SemanticDOM, string>]-
width图像宽度string | number-
onError加载错误回调(event: Event) => void-

其他属性见 <img>

PreviewType

参数说明类型默认值版本
actionsRender自定义工具栏渲染(originalNode: VNode, info: ToolbarRenderInfoType) => VNode-
classNames自定义语义化结构类名[Record<SemanticDOM, string>]-
closeIcon自定义关闭 IconVNode-
cover自定义预览遮罩VNode | CoverConfig-CoverConfig v6.0 开始支持
getContainer指定预览挂载的节点,但依旧为全屏展示,false 为挂载在当前位置string | HTMLElement | (() => HTMLElement) | false-
imageRender自定义预览内容(originalNode: VNode, info: { transform: TransformType, image: ImgInfo }) => VNode-
mask预览遮罩效果boolean | { enabled?: boolean, blur?: boolean }true-
maxScale最大缩放倍数number50
minScale最小缩放倍数number1
movable是否可移动booleantrue
open是否显示预览boolean-
rootClassName预览图的根 DOM 类名,会同时作用在图片和预览层最外侧string-
scaleStep1 + scaleStep 为缩放放大的每步倍数number0.5
src自定义预览 srcstring-
styles自定义语义化结构样式[Record<SemanticDOM, string>]-
onOpenChange预览打开状态变化的回调(visible: boolean) => void-
onTransform预览图 transform 变化的回调{ transform: TransformType, action: TransformAction }-

PreviewGroup

参数说明类型默认值版本
fallback加载失败容错地址string-
items预览数组string[] | { src: string, crossOrigin: string, ... }[]-
preview预览参数,为 false 时禁用boolean | PreviewGroupTypetrue

PreviewGroupType

参数说明类型默认值版本
actionsRender自定义工具栏渲染(originalNode: VNode, info: ToolbarRenderInfoType) => VNode-
classNames自定义预览类名对象[Record<SemanticDOM, string>]-
closeIcon自定义关闭 IconVNode-
countRender自定义预览计数内容(current: number, total: number) => VNode-
current当前预览图的 indexnumber-
getContainer指定预览挂载的节点,但依旧为全屏展示,false 为挂载在当前位置string | HTMLElement | (() => HTMLElement) | false-
imageRender自定义预览内容(originalNode: VNode, info: { transform: TransformType, image: ImgInfo, current: number }) => VNode-
mask预览遮罩效果boolean | { enabled?: boolean, blur?: boolean }true-
minScale最小缩放倍数number1
maxScale最大放大倍数number50
movable是否可移动booleantrue
open是否显示预览boolean-
styles自定义语义化结构样式[Record<SemanticDOM, string>]-
scaleStep1 + scaleStep 为缩放放大的每步倍数number0.5
onOpenChange预览打开状态变化回调,额外携带当前预览图索引(visible: boolean, info: { current: number }) => void-
onChange切换预览图的回调(current: number, prevCurrent: number) => void-
onTransform预览图 transform 变化的回调{ transform: TransformType, action: TransformAction }-

Interface

TransformType

typescript
{
  x: number;
  y: number;
  rotate: number;
  scale: number;
  flipX: boolean;
  flipY: boolean;
}

TransformAction

typescript
type TransformAction =
  | 'flipY'
  | 'flipX'
  | 'rotateLeft'
  | 'rotateRight'
  | 'zoomIn'
  | 'zoomOut'
  | 'close'
  | 'prev'
  | 'next'
  | 'wheel'
  | 'doubleClick'
  | 'move'
  | 'dragRebound'
  | 'reset';

ToolbarRenderInfoType

typescript
{
  icons: {
    flipYIcon: VNode;
    flipXIcon: VNode;
    rotateLeftIcon: VNode;
    rotateRightIcon: VNode;
    zoomOutIcon: VNode;
    zoomInIcon: VNode;
  };
  actions: {
    onActive?: (index: number) => void; // 5.21.0 之后支持
    onFlipY: () => void;
    onFlipX: () => void;
    onRotateLeft: () => void;
    onRotateRight: () => void;
    onZoomOut: () => void;
    onZoomIn: () => void;
    onReset: () => void; // 5.17.3 之后支持
    onClose: () => void;
  };
  transform: TransformType,
  current: number;
  total: number;
  image: ImgInfo
}

ImgInfo

typescript
{
  url: string;
  alt: string;
  width: string | number;
  height: string | number;
}

CoverConfig

typescript
type CoverConfig = {
  coverNode?: VNode; // 自定义遮罩元素
  placement?: 'top' | 'bottom' | 'center'; // 设置预览遮罩显示的位置
};

基于 MIT 许可发布