JGuang

图片

Image · Ant Design

交互预览
npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

图片

可预览的图片。

何时使用

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

代码演示

  • 基本用法 · basic

  • 渐进加载 · placeholder

  • 容错处理 · fallback

  • 多张图片预览 · preview-group

  • 相册模式 · preview-group-visible

  • 自定义预览图片 · previewSrc

  • 受控的预览 · controlled-preview

  • 自定义工具栏 · toolbarRender

  • 自定义预览内容 · imageRender

  • 预览遮罩 · mask

  • 自定义语义结构的样式和类 · style-class

  • 嵌套 · nested

API

通用属性参考:通用属性

Image

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

其他属性见 <img>

PlaceholderType

参数说明类型默认值版本
progress进度配置,设置为 true 显示渐变动画,设置 { percent: number } 显示进度,render 自定义渲染boolean | ImageProgressConfig-

ImageProgressConfig

参数说明类型默认值版本
percent进度值number-
render自定义渲染,接收默认的进度 UI 和百分比(progress: React.ReactNode, percent: number) => React.ReactNode-

PreviewType

参数说明类型默认值版本
actionsRender自定义工具栏渲染(originalNode: React.ReactElement, info: ToolbarRenderInfoType) => React.ReactNode-
closeIcon自定义关闭 IconReact.ReactNode-
cover自定义预览遮罩React.ReactNode | CoverConfig-CoverConfig v6.0 开始支持
focusTrap预览打开时是否在预览内捕获焦点booleantrue6.4.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, closable?: boolean }truemask.closable: 6.4.0
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>-
wheel是否启用鼠标滚轮缩放booleantrue6.6.0
toolbarRender自定义工具栏,请使用 actionsRender 替换(originalNode: React.ReactElement, info: Omit<ToolbarRenderInfoType, 'current' | 'total'>) => React.ReactNode-
visible是否显示,请使用 open 替换boolean-
onOpenChange预览打开状态变化的回调(open: boolean) => void-
onTransform预览图 transform 变化的回调{ transform: TransformType, action: TransformAction }-
onVisibleChange当 visible 发生改变时的回调,请使用 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-
focusTrap预览打开时是否在预览内捕获焦点booleantrue6.4.0
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, closable?: boolean }truemask.closable: 6.4.0
maskClassName缩略图遮罩类名,请使用 classNames.cover 替换string-
minScale最小缩放倍数number1
maxScale最大放大倍数number50
movable预览图片大于视口时是否可拖拽移动booleantrue
open是否显示预览boolean-
rootClassName预览图的根 DOM 类名,会同时作用在图片和预览层最外侧,请使用 classNames.root 替换string-
styles自定义语义化结构样式Record<SemanticDOM, CSSProperties>-
wheel是否启用鼠标滚轮缩放booleantrue6.6.0
scaleStep1 + scaleStep 为缩放放大的每步倍数number0.5
toolbarRender自定义工具栏,请使用 actionsRender 替换(originalNode: React.ReactElement, info: ToolbarRenderInfoType) => React.ReactNode-
visible是否显示,请使用 open 替换boolean-
onOpenChange预览打开状态变化回调,额外携带当前预览图索引(open: boolean, info: { current: number }) => void-
onChange切换预览图的回调(current: number, prevCurrent: number) => void-
onTransform预览图 transform 变化的回调{ transform: TransformType, action: TransformAction }-
onVisibleChange当 visible 发生改变时的回调,请使用 onOpenChange 替换(visible: boolean, prevVisible: boolean, current: number) => void-

Interface

TransformType

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

TransformAction

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

ToolbarRenderInfoType

{
  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

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

CoverConfig

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

Semantic DOM

语义节点原生说明版本
root根元素,设置相对定位和行内块布局样式—
image图片元素,设置宽度、高度和垂直对齐样式—
cover悬浮图片显示的提示元素,设置绝对定位、背景色、透明度和过渡动画样式—
popup.root预览根元素,设置固定定位、层级和背景遮罩样式—
popup.mask预览遮罩元素,设置绝对定位和半透明背景样式—
popup.body预览内容元素,设置flex布局、居中对齐和指针事件样式—
popup.footer预览页脚元素,设置绝对定位、居中布局和底部操作区域样式—
popup.actions预览操作组元素,设置flex布局、背景色、圆角和操作按钮样式—
popup.close预览关闭按钮元素,设置按钮的基础样式6.4.0

语义说明来源: vendor/components/image/demo/_semantic.tsx

主题变量(Design Token)

类型、继承关系和原生令牌声明保持固定源码原文;默认值由原生主题计算,并可能受 ConfigProvider 覆盖。本表不伪造静态默认值。

令牌类型原生说明
zIndexPopupnumber预览浮层 z-index
previewOperationSizenumber预览操作图标大小
previewOperationColorstring预览操作图标颜色
previewOperationHoverColorstring预览操作图标悬浮颜色
previewOperationColorDisabledstring预览操作图标禁用颜色
progressAnimationDurationstring加载动画基础时长

声明来源: vendor/components/image/style/index.ts

import type { CSSObject } from '@ant-design/cssinjs';

import { unit } from '@ant-design/cssinjs';

import { FastColor } from '@ant-design/fast-color';

import type { FullToken, GenerateStyle, GetDefaultToken } from '../../theme/internal';

import { genStyleHooks, mergeToken } from '../../theme/internal';

import { genFocusOutline, genFocusStyle } from '../../style';

import { inkFlow1, inkFlow2, inkFlow3, progressActive } from './progressAnimation';

export interface ComponentToken {
  /**
   * @desc 预览浮层 z-index
   * @descEN z-index of preview popup
   */
  zIndexPopup: number;
  /**
   * @desc 预览操作图标大小
   * @descEN Size of preview operation icon
   */
  previewOperationSize: number;
  /**
   * @desc 预览操作图标颜色
   * @descEN Color of preview operation icon
   */
  previewOperationColor: string;
  /**
   * @desc 预览操作图标悬浮颜色
   * @descEN Color of hovered preview operation icon
   */
  previewOperationHoverColor: string;
  /**
   * @desc 预览操作图标禁用颜色
   * @descEN Disabled color of preview operation icon
   */
  previewOperationColorDisabled: string;
  /**
   * @desc 加载动画基础时长
   * @descEN Base duration of loading animation
   */
  progressAnimationDuration: string;
}

/**
 * @desc Image 组件的 Token
 * @descEN Token for Image component
 */
export interface ImageToken extends FullToken<'Image'> {
  /**
   * @desc 预览类名
   * @descEN Preview class name
   */
  previewCls: string;
  /**
   * @desc 预览切换按钮尺寸
   * @descEN Size of preview switch button
   */
  imagePreviewSwitchSize: number;
}

export type PositionType = 'static' | 'relative' | 'fixed' | 'absolute' | 'sticky' | undefined;

原生通用属性

Tips: 以下通用属性适用于 antd 大部分组件,不支持的组件会单独说明。

参数说明类型默认值
style自定义样式CSSProperties-
className自定义类名string-
rootClassName添加在组件最外层的 classNamestring-
autoFocus自动获取焦点,仅对表单类、链接、交互容器等可聚焦元素生效booleanfalse

安装并复现示例

npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

使用 ConfigProvider 和原生 App,并单独配置 dayjs 语言。每个示例在查看代码中列出完整源码文件和额外固定依赖。示例名称用于选择演示,不是组件通用属性。主题、语言与 SSR 初始化见资源安装指南。

原生类型参考

源码查看器包含未修改的原生实现和以下声明文件,继承类型仍位于原生包中。代码中的英文注释保留为源码参考。

  • vendor/components/image/PreviewGroup.tsx
  • vendor/components/image/Progress.tsx
  • vendor/components/image/index.tsx
  • vendor/components/image/style/index.ts

来源与许可

https://github.com/ant-design/ant-design/tree/4a39f54842eade4e565ab336ef6097cd7e723cdd

保留原生中英文正文与可执行示例;官网专用的嵌入章节和令牌表格在本地展开。Ant Design 使用 MIT 许可,另列依赖的许可证也需保留。上传预览禁止向外发起请求,不提供后端服务。