Back to Ant Design

Drawer

components/drawer/index.zh-CN.md

6.4.47.0 KB
Original Source

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

抽屉从父窗体边缘滑入,覆盖住部分父窗体内容。用户在抽屉内操作时不必离开当前任务,操作完成后,可以平滑地回到原任务。

  • 当需要一个附加的面板来控制父窗体内容,这个面板在需要时呼出。比如,控制界面展示样式,往界面中添加内容。
  • 当需要在当前任务流中插入临时任务,创建或预览附加内容。比如展示协议条款,创建子对象。

开发者注意事项:

5.17.0 版本,我们提供了 loading 属性,内置 Spin 组件作为加载状态,但是自 5.18.0 版本开始,我们修复了设计失误,将内置的 Spin 组件替换成了 Skeleton 组件,同时收窄了 loading api 的类型范围,只能接收 boolean 类型。

代码演示 {#examples}

<!-- prettier-ignore -->

<code src="./demo/basic-right.tsx">基础抽屉</code> <code src="./demo/placement.tsx">自定义位置</code> <code src="./demo/resizable.tsx" version="6.0.0">可调整大小</code> <code src="./demo/loading.tsx" version="5.17.0">加载中</code> <code src="./demo/extra.tsx">额外操作</code> <code src="./demo/render-in-current.tsx">渲染在当前 DOM</code> <code src="./demo/form-in-drawer.tsx">抽屉表单</code> <code src="./demo/user-profile.tsx">信息预览抽屉</code> <code src="./demo/multi-level-drawer.tsx">多层抽屉</code> <code src="./demo/size.tsx">预设宽度</code> <code src="./demo/mask.tsx">遮罩</code> <code src="./demo/closable-placement.tsx" version="5.28.0">关闭按钮位置</code> <code src="./demo/style-class.tsx" version="6.0.0">自定义语义结构的样式和类</code> <code src="./demo/config-provider.tsx" debug>ConfigProvider</code> <code src="./demo/no-mask.tsx" debug>无遮罩</code> <code src="./demo/render-panel.tsx" debug>_InternalPanelDoNotUseOrYouWillBeFired</code> <code src="./demo/scroll-debug.tsx" debug>滚动锁定调试</code> <code src="./demo/component-token.tsx" debug>组件 Token</code>

API

通用属性参考:通用属性

参数说明类型默认值版本全局配置
afterOpenChange切换抽屉时动画结束后的回调function(open)-×
bodyStyle抽屉内容区域样式,请使用 styles.body 替代CSSProperties--×
classNameDrawer 容器外层 className 设置,如果需要设置最外层,请使用 rootClassNamestring-5.7.0
classNames用于自定义 Drawer 组件内部各语义化结构的 class,支持对象或函数Record<SemanticDOM, string> | (info: { props })=> Record<SemanticDOM, string>-5.10.0
closable是否显示关闭按钮。可通过 placement 配置其位置boolean | { closeIcon?: React.ReactNode; disabled?: boolean; placement?: 'start' | 'end' }trueplacement: 5.28.05.15.0,placement: 6.1.1
contentWrapperStyle抽屉包裹层样式,请使用 styles.wrapper 替代CSSProperties--×
destroyOnClose关闭时销毁 Drawer 里的子元素booleanfalse×
destroyInactivePanel关闭时销毁 Drawer 里的子元素,请使用 destroyOnHidden 替代booleanfalse-×
destroyOnHidden关闭时销毁 Drawer 里的子元素booleanfalse5.25.0×
drawerStyle抽屉面板样式,请使用 styles.section 替代CSSProperties--×
extra抽屉右上角的操作区域ReactNode-4.17.0×
footer抽屉的页脚ReactNode-×
footerStyle抽屉底部样式,请使用 styles.footer 替代CSSProperties--×
forceRender预渲染 Drawer 内元素booleanfalse×
focusable抽屉内焦点管理的配置{ trap?: boolean, focusTriggerAfterClose?: boolean }-6.2.06.4.0
getContainer指定 Drawer 挂载的节点,并在容器内展现false 为挂载在当前位置HTMLElement | () => HTMLElement | Selectors | falsebody×
headerStyle抽屉头部的样式,请使用 styles.header 替换CSSProperties-×
height高度,在 placementtopbottom 时使用,请使用 size 替换string | number378×
keyboard是否支持键盘 esc 关闭booleantrue×
loading显示骨架屏booleanfalse5.17.0×
mask遮罩效果boolean | { enabled?: boolean, blur?: boolean, closable?: boolean }truemask.closable: 6.3.06.0.0,mask.closable: 6.3.0
maskClosable点击蒙层是否允许关闭booleantrue×
maskStyle抽屉遮罩样式,请使用 styles.mask 替代CSSProperties--×
maxSize可拖拽的最大尺寸(宽度或高度,取决于 placementnumber-6.0.0×
openDrawer 是否可见booleanfalse×
placement抽屉的方向top | right | bottom | leftright×
push用于设置多层 Drawer 的推动行为boolean | { distance: string | number }{ distance: 180 }4.5.0+×
resizable是否启用拖拽改变尺寸boolean | ResizableConfig-boolean: 6.1.0×
rootStyle可用于设置 Drawer 最外层容器的样式,和 style 的区别是作用节点包括 maskCSSProperties-×
size预设抽屉宽度(或高度),default 378px 和 large 736px,或自定义数字'default' | 'large' | number | string'default'4.17.0, string: 6.2.0×
styleDrawer 面板的样式,如需仅配置 body 部分,请使用 styles.bodyCSSProperties-5.7.0
styles用于自定义 Drawer 组件内部各语义化结构的行内 style,支持对象或函数Record<SemanticDOM, CSSProperties> | (info: { props })=> Record<SemanticDOM, CSSProperties>-5.10.0
title标题ReactNode-×
width宽度,请使用 size 替换string | number378×
zIndex设置 Drawer 的 z-indexnumber1000×
onClose点击遮罩层或左上角叉或取消按钮的回调function(e)-×
drawerRender自定义渲染抽屉(node: ReactNode) => ReactNode-5.18.0×

ResizableConfig

参数说明类型默认值版本
onResizeStart开始拖拽调整大小时的回调() => void-6.0.0
onResize拖拽调整大小时的回调(size: number) => void-6.0.0
onResizeEnd结束拖拽调整大小时的回调() => void-6.0.0

Semantic DOM {#semantic-dom}

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

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

<ComponentTokenTable component="Drawer"></ComponentTokenTable>