Openblocks Drawer 抽屉组件实战:布局定位、尺寸控制与 openDrawer/closeDrawer 事件触发
低代码后端前端开发工具【免费下载链接】openblocks The Open Source Retool Alternative项目地址https://gitcode.com/gh_mirrors/op/openblocks点击查看免费下载Drawer抽屉是 Openblocks 中用于在应用主界面上方弹出侧边浮层的组件它可以在不打断主窗口工作流的前提下展示信息或完成操作典型场景如购物车、筛选面板、设置面板等。本文以官方组件指南 docs/build-apps/component-guides/drawer.md 为核心脉络结合仓库内 Drawer 组件源码drawerComp.tsx系统讲解 Drawer 的布局与编辑规则、放置方向、宽度/高度定制边界以及如何通过事件处理器与 JS 代码调用openDrawer/closeDrawer方法完成打开与关闭控制。读完本文你将能够在一个应用内独立搭建并完整控制自己的 Drawer 抽屉。认识 Drawer不打断主流程的浮层侧栏在 Openblocks 中Drawer是一个叠加式侧边栏overlay sidebar用于在主窗口之上展示信息或执行操作而不中断主窗口正在进行的工作流。它特别适合承载临时上下文型的内容例如电商应用中的购物车用户在主页面浏览商品点击按钮后购物车从侧边滑出查看完毕后再收回全程无需离开当前页面。下图演示了官方文档中使用 Drawer 构建的在线购物购物车示例从源码结构看Drawer 在 Openblocks 中是一种hook 组件非 UI 画布组件它在 hookCompTypes.tsx 中被归类为category: ui且允许非单例singleton: false并在 hookComp.tsx 的HookMap中以drawer: DrawerComp注册。这意味着一个应用可以存在多个 Drawer 实例它们与 Modal 一样挂在应用的全局层级之上。Layout拖拽插入与编辑模式下的隔离通过拖拽操作插入后Drawer默认浮动在主窗口的右侧你可以按需继续往 Drawer 上添加各类组件按钮、列表、表格等把它当作一个独立的容器画布来布局。编辑模式下的组件隔离在 Drawer 的编辑模式下画布上的其他组件不可编辑。这一行为在源码中由 hookComp.tsx 的SelectHookView逻辑保障当从左侧面板或新增组件来源选中 Drawer及其子组件时会通过changeChildAction(value, true)自动将visible置为true以进入编辑态而当选中画布上的其他组件时若 Drawer 当前可见则会自动将visible置为false。也就是说编辑状态下 Drawer 与主画布是互斥聚焦的避免了两边组件同时被误操作。关闭后如何重新打开提示当 Drawer 被关闭后你可以在左侧面板的Modals标签页中点击对应的标签重新打开它。左侧面板的 Modals 标签在 LeftContent.tsx 中实现modalsCollapse通过getTreeUI(TreeUIKey.Modals)渲染所有 Modal / Drawer 组件树并展示在BaseSection name{trans(leftPanel.modals)}区块中。点击其中的 Drawer 标签即会触发上文所述的visible置位逻辑将抽屉重新拉出到编辑视图中。Position四种放置方向在Properties属性标签页中可以设置 Drawer 的位置placement默认位置是主窗口的右侧。源码中位置选项定义在 drawerComp.tsx 的PlacementOptions常量中共支持四个方向选项属性面板文案说明topTop / 顶部从主窗口顶部滑出此时可配置高度heightrightRight / 右侧默认值从右侧滑出此时可配置宽度widthbottomBottom / 底部从底部滑出此时可配置高度heightleftLeft / 左侧从左侧滑出此时可配置宽度width位置属性在属性面板中以单选按钮radioButton: true形式呈现。放置方向还决定了后续尺寸控制中到底调整宽度还是高度——这是理解 Drawer 尺寸配置的关键前提。Resize宽度与高度的定制边界在Properties标签页中你可以以像素或百分比为单位设置 Drawer 的宽度。需要特别注意的是Drawer 的高度默认与主窗口一致且不可自定义这一约束仅针对左右滑出方向顶部/底部滑出时则可配置高度。从源码实现drawerComp.tsx可以进一步确认尺寸机制默认宽度 378px常量DEFAULT_SIZE 378当宽度未填时生效数字与百分比兼容transToPxSize函数对纯数字自动补px后缀非数字则按原样传入例如520会变为520px而60%保持百分比形式。属性面板的 tooltip 文案也明确标注为 Number or percentage, e.g. 520, 60%见 en.ts左右方向只展示width输入框高度由主窗口决定height传空字符串上下方向top/bottom时高度可调且增加AutoHeight自动高度开关当关闭自动高度时会额外显示height输入框默认同样为 378pxtooltip 示例为378运行时缩放非用户视图模式下Drawer 可通过拖拽边缘实时调整大小onResizeStop回调会根据方向把新尺寸写回width或height状态drawerComp.tsx。引用 Drawer 的两种方式你可以在应用中的任何位置通过 JS 代码引用 Drawer也可以通过Properties Interaction Event handlers中的Control component控制组件动作来调用它。方式一JS 代码直接引用Drawer 对外暴露了状态与方法由withMethodExposing/withExposingConfigs包装见 drawerComp.tsx暴露项类型说明drawer.visible布尔状态当前是否可见可读写也可在 JS 中直接赋值控制drawer.openDrawer()方法打开抽屉无参数等价于把visible置为truedrawer.closeDrawer()方法关闭抽屉无参数等价于把visible置为false因此可以在任意 JS 代码按钮的onClick、查询的预处理脚本、定时器等中写// 打开购物车抽屉 cart.openDrawer(); // 关闭购物车抽屉 cart.closeDrawer(); // 或者直接操作可见性状态 cart.visible true;方式二Control component 动作的底层机制在事件处理器中选择Control component作为动作时其实是在使用executeCompAction机制executeCompAction.tsx。其实现原理为从editorState.getAllUICompMap()中收集所有暴露了方法的组件及其exposingInfo().methods在属性面板中以下拉框选择目标组件与方法名运行时通过routeByNameAction配合customAction({ type: execute, methodName, params })定位到具体组件实例并执行对应方法。这也解释了为何属性面板中组件和方法是两个联动下拉框——方法列表由所选组件动态决定。实战通过按钮打开与关闭购物车抽屉以下步骤来自官方文档中在线购物示例的购物车场景实现了点击按钮弹出购物车、点击继续购物收回购物车的完整闭环。触发 openDrawer添加一个按钮Button并将其重命名为gotoCart为按钮设置事件处理器Event handlers在Action下拉框中选择Control component然后选择组件cart、方法openDrawer。所有设置会自动保存。点击gotoCart按钮绑定的cart抽屉即被打开。触发 closeDrawer触发closeDrawer的方式与触发openDrawer完全类似区别仅在于方法选择为closeDrawer添加一个按钮并重命名为gobackShopping例如显示为Continue Shopping / 继续购物为该按钮设置事件处理器Action选择Control component选择组件cart、方法closeDrawer设置自动保存点击继续购物按钮绑定的cart抽屉即被关闭。由于openDrawer/closeDrawer均为无参方法params: []在上述动作配置中不需要填写任何参数这也是它们适合作为事件动作直接调用的原因。补充配置遮罩、层级与样式除位置和尺寸外Drawer 在属性面板的基础Basic区块中还有几项实用配置同样可在源码 drawerComp.tsx 中确认点击遮罩关闭Mask closable默认开启maskClosable: withDefault(BoolControl, true)。开启后用户点击抽屉外的半透明遮罩即可关闭抽屉显示遮罩Show mask默认开启showMask: withDefault(BoolControl, true)。关闭后遮罩不渲染抽屉浮层不会阻挡底层交互层级Drawer 的zIndex为常量Layers.drawer 950见 Layers.ts高于普通画布组件确保浮层始终位于上层样式Drawer 支持背景色设置DrawerStyle定义为[getBackground()]见 styleControlConstants.tsx并且内部内容区域通过BackgroundColorContext将背景色传递给子组件容器内边距为固定 16pxDEFAULT_PADDING 16。配合位置、尺寸与遮罩行为即可把 Drawer 从默认的右侧窄条调整成符合业务需要的任意形态——例如从底部弹出的筛选面板或从左侧滑出的导航抽屉。小结本文基于官方组件指南并对照源码完整梳理了 Openblocks Drawer 组件的使用要点它默认悬浮于主窗口右侧、支持上下左右四种放置方向宽度支持像素与百分比两种写法高度在左右方向与主窗口一致、在上下方向可自定义并支持自动高度编辑模式下与画布组件互斥聚焦关闭后可从左侧Modals标签重新打开。在事件控制层面既可在任意 JS 代码中通过drawer.visible、drawer.openDrawer()、drawer.closeDrawer()直接操作也可在事件处理器中借助Control component动作无参数调用从而轻松实现按钮打开抽屉、按钮关闭抽屉的完整交互闭环。赞分享低代码后端前端开发工具【免费下载链接】openblocks The Open Source Retool Alternative项目地址https://gitcode.com/gh_mirrors/op/openblocks点击查看免费下载相关推荐Naive UI Drawer 抽屉组件完全指南定位、缩放、多层抽屉与 API 全解析Naive UI Drawer 抽屉组件完全指南定位、缩放、多层抽屉与 API 全解析 Naive UIA Vue 3 Component Library前端UI组件Ant Design Drawer 组件 size 尺寸预设详解378px 默认与 736px 大号抽屉的源码级实战指南Ant Design Drawer 组件 size 尺寸预设详解378px 默认与 736px 大号抽屉的源码级实战指南 抽屉Drawer是 Ant De前端UI组件设计系统Nuxt UI 4 Drawer 组件实战指南滑动抽屉的 Props、Slots 与主题定制Nuxt UI 4 Drawer 组件实战指南滑动抽屉的 Props、Slots 与主题定制 导读 UDrawer 是 Nuxt UI 4 中一个基于 vau前端UI组件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Unsloth 3行代码微调:合成数据质量把控与实战指南

Unsloth 3行代码微调:合成数据质量把控与实战指南

直接正文开始。1. 为什么要用合成数据微调,以及为什么是Unsloth做微调这件事,最大的成本往往不是机器,而是数据。很多人一上来就到处找数据集,或者手工标注几百条样本,结果发现任务本身太垂直,公开数据根本…

2026/10/12 5:47:24 阅读更多 →
掉地面包背后:烘焙食安全链条拆解与门店现场管理落地

掉地面包背后:烘焙食安全链条拆解与门店现场管理落地

一家开了五年的连锁面包店,因为一段“员工把掉在地上的面包捡起来放回货架”的视频,一夜之间登上热搜,总部电话被打爆,门店营业额当周腰斩。这类事这几年并不少见,每次出现都会让整个烘焙行业跟着紧张一次。你可能会觉…

2026/10/12 5:47:24 阅读更多 →
C语言联合体与枚举:从内存利用到类型安全的实战指南

C语言联合体与枚举:从内存利用到类型安全的实战指南

写之前先说实话,这个标题我一开始真以为是个什么网红食谱,结果点进去才发现是个C语言的自定义类型话题。“嘎嘎滴辣虾”这个开场相当有迷惑性,但顺着这个味儿,今天这篇就想跟大伙儿聊聊联合体(union)和枚举…

2026/10/12 5:47:24 阅读更多 →

最新新闻

短线交易生存指南:模式内交易、仓位管理与止损铁律

短线交易生存指南:模式内交易、仓位管理与止损铁律

我不确定各位做短线交易多久了,但如果你在交易社区里泡过一阵,应该会发现一个特别直观的现象:晒收益截图的人换了一茬又一茬,今天还在涨停板上来回横跳的那位,第二年基本就没了声音。短线交易之所以是淘汰率最高的领域…

2026/10/12 6:25:44 阅读更多 →
Mongoose入门教程:用TaoToken统一Key打通Node.js与MongoDB开发链路

Mongoose入门教程:用TaoToken统一Key打通Node.js与MongoDB开发链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 6:25:44 阅读更多 →
傅里叶算子结合SVM的手势识别源码详解与调参实战

傅里叶算子结合SVM的手势识别源码详解与调参实战

简介:面向手势识别与计算机视觉学习场景,这份完整源代码基于Python实现,并附带已构建好的样本库,适合机器学习初学者、课程设计或毕业设计者借鉴。代码运行于Win10 Python3.7环境,完整覆盖图像平滑、OTSU阈值肤色分割…

2026/10/12 6:25:44 阅读更多 →
CAMStoWRF完全指南:从CAMS数据下载到WRF-Chem初边界场配置

CAMStoWRF完全指南:从CAMS数据下载到WRF-Chem初边界场配置

做空气质量模拟的人应该都干过这件事:把全球化学模式的输出结果塞进WRF-Chem里当初始场和边界场。早些年大家满世界找MOZART的nc文件,后来慢慢有人开始用CAMS(哥白尼大气监测服务)的再分析数据。CAMS数据覆盖面广、化学物种相对齐…

2026/10/12 6:25:44 阅读更多 →
多角色管理与押金自动退:一站式租赁商城小程序源码系统解析

多角色管理与押金自动退:一站式租赁商城小程序源码系统解析

做租赁类小程序这几年,我见过太多项目死在同一个坑里:商品、支付都接好了,结果押金体系没设计好,客人退押金要催、商家扣款要吵、平台两边受气。今天聊的这套“多角色管理、押金自动退的一站式线上租赁商城小程序源码系统”&#…

2026/10/12 6:25:44 阅读更多 →
开源+私有化:打造能主动干活的企业AI工作伙伴

开源+私有化:打造能主动干活的企业AI工作伙伴

1. 从"只会聊天"到"能干活":企业AI落地的真实断层在哪过去两年,我参与过好几个企业内部的AI助手项目,几乎每一个都经历过同样的尴尬:上线第一周大家图新鲜,问天气、写周报、翻译邮件,用…

2026/10/12 6:24:44 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →