Back to Ant Design

Image

components/image/index.zh-CN.md

6.3.79.3 KB
Original Source

何时使用 {#when-to-use}

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

代码演示 {#examples}

<!-- prettier-ignore -->

<code src="./demo/basic.tsx">基本用法</code> <code src="./demo/fallback.tsx">容错处理</code> <code src="./demo/placeholder.tsx">渐进加载</code> <code src="./demo/preview-group.tsx">多张图片预览</code> <code src="./demo/preview-group-visible.tsx">相册模式</code> <code src="./demo/previewSrc.tsx">自定义预览图片</code> <code src="./demo/controlled-preview.tsx">受控的预览</code> <code src="./demo/toolbarRender.tsx">自定义工具栏</code> <code src="./demo/imageRender.tsx">自定义预览内容</code> <code src="./demo/mask.tsx">预览遮罩</code> <code src="./demo/style-class.tsx" version="6.0.0">自定义语义结构的样式和类</code> <code src="./demo/preview-mask.tsx" debug>自定义预览文本</code> <code src="./demo/coverPlacement.tsx" debug>自定义预览遮罩位置</code> <code src="./demo/nested.tsx">嵌套</code> <code src="./demo/preview-group-top-progress.tsx" debug>多图预览时顶部进度自定义</code> <code src="./demo/component-token.tsx" debug>自定义组件 Token</code> <code src="./demo/preview-imgInfo.tsx" debug>在渲染函数中获取图片信息</code>

API

通用属性参考:通用属性

Image

参数说明类型默认值版本
alt图像描述string-
classNames用于自定义组件内部各语义化结构的 class,支持对象或函数Record<SemanticDOM, string> | (info: { props })=> Record<SemanticDOM, string>-
fallback加载失败容错地址string-
height图像高度string | number-
placeholder加载占位,为 true 时使用默认占位ReactNode-
preview预览参数,为 false 时禁用boolean | PreviewTypetrue
src图片地址string-
styles用于自定义组件内部各语义化结构的行内 style,支持对象或函数Record<SemanticDOM, CSSProperties> | (info: { props })=> Record<SemanticDOM, CSSProperties>-
width图像宽度string | number-
onError加载错误回调(event: Event) => void-

其他属性见 <img>

PreviewType

参数说明类型默认值版本
actionsRender自定义工具栏渲染(originalNode: React.ReactElement, info: ToolbarRenderInfoType) => React.ReactNode-
closeIcon自定义关闭 IconReact.ReactNode-
cover自定义预览遮罩React.ReactNode | CoverConfig-CoverConfig v6.0 开始支持
destroyOnClose关闭预览时销毁子元素,已移除,不再支持booleanfalse
forceRender强制渲染预览图,已移除,不再支持boolean-
getContainer指定预览挂载的节点,但依旧为全屏展示,false 为挂载在当前位置string | HTMLElement | (() => HTMLElement) | false-
imageRender自定义预览内容(originalNode: React.ReactElement, info: { transform: TransformType, image: ImgInfo }) => React.ReactNode-
mask预览遮罩效果boolean | { enabled?: boolean, blur?: boolean }true-
maskClassName缩略图遮罩类名,请使用 classNames.cover 替换string-
maxScale最大缩放倍数number50
minScale最小缩放倍数number1
movable是否可移动booleantrue
open是否显示预览boolean-
rootClassName预览图的根 DOM 类名,会同时作用在图片和预览层最外侧string-
scaleStep1 + scaleStep 为缩放放大的每步倍数number0.5
src自定义预览 srcstring-
styles自定义语义化结构样式Record<SemanticDOM, CSSProperties>-
toolbarRender自定义工具栏,请使用 actionsRender 替换(originalNode: React.ReactElement, info: Omit<ToolbarRenderInfoType, 'current' | 'total'>) => React.ReactNode-
visible是否显示,请使用 open 替换boolean-
onOpenChange预览打开状态变化的回调(visible: boolean) => void-
onTransform预览图 transform 变化的回调{ transform: TransformType, action: TransformAction }-
onVisibleChangevisible 发生改变时的回调,请使用 onOpenChange 替换(visible: boolean, prevVisible: boolean) => void-

PreviewGroup

参数说明类型默认值版本
classNames用于自定义组件内部各语义化结构的 class,支持对象或函数Record<SemanticDOM, string> | (info: { props })=> Record<SemanticDOM, string>-
fallback加载失败容错地址string-
items预览数组string[] | { src: string, crossOrigin: string, ... }[]-
preview预览参数,为 false 时禁用boolean | PreviewGroupTypetrue

PreviewGroupType

参数说明类型默认值版本
actionsRender自定义工具栏渲染(originalNode: React.ReactElement, info: ToolbarRenderInfoType) => React.ReactNode-
closeIcon自定义关闭 IconReact.ReactNode-
countRender自定义预览计数内容(current: number, total: number) => React.ReactNode-
current当前预览图的 indexnumber-
forceRender强制渲染预览图,已移除,不再支持boolean-
getContainer指定预览挂载的节点,但依旧为全屏展示,false 为挂载在当前位置string | HTMLElement | (() => HTMLElement) | false-
imageRender自定义预览内容(originalNode: React.ReactElement, info: { transform: TransformType, image: ImgInfo, current: number }) => React.ReactNode-
mask预览遮罩效果boolean | { enabled?: boolean, blur?: boolean }true-
maskClassName缩略图遮罩类名,请使用 classNames.cover 替换string-
minScale最小缩放倍数number1
maxScale最大放大倍数number50
movable是否可移动booleantrue
open是否显示预览boolean-
rootClassName预览图的根 DOM 类名,会同时作用在图片和预览层最外侧,请使用 classNames.root 替换string-
styles自定义语义化结构样式Record<SemanticDOM, CSSProperties>-
scaleStep1 + scaleStep 为缩放放大的每步倍数number0.5
toolbarRender自定义工具栏,请使用 actionsRender 替换(originalNode: React.ReactElement, info: ToolbarRenderInfoType) => React.ReactNode-
visible是否显示,请使用 open 替换boolean-
onOpenChange预览打开状态变化回调,额外携带当前预览图索引(visible: boolean, info: { current: number }) => void-
onChange切换预览图的回调(current: number, prevCurrent: number) => void-
onTransform预览图 transform 变化的回调{ transform: TransformType, action: TransformAction }-
onVisibleChangevisible 发生改变时的回调,请使用 onOpenChange 替换(visible: boolean, prevVisible: boolean, current: number) => void-

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: React.ReactNode;
    flipXIcon: React.ReactNode;
    rotateLeftIcon: React.ReactNode;
    rotateRightIcon: React.ReactNode;
    zoomOutIcon: React.ReactNode;
    zoomInIcon: React.ReactNode;
  };
  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?: React.ReactNode; // 自定义遮罩元素
  placement?: 'top' | 'bottom' | 'center'; // 设置预览遮罩显示的位置
};

Semantic DOM

<code src="./demo/_semantic.tsx" simplify="true"></code>

主题变量(Design Token){#design-token}

<ComponentTokenTable component="Image"></ComponentTokenTable>