新闻详情

新闻详情

首页 / 资讯中心 / 详情

ng-zorro-antd Resizable 栅格化拖拽调整:Grid 模式原理与实战

发布时间:2026/9/28 2:44:29来源:尧图网络
ng-zorro-antd Resizable 栅格化拖拽调整:Grid 模式原理与实战
UI组件前端【免费下载链接】ng-zorro-antdAngular UI Component Library based on Ant Design项目地址https://gitcode.com/gh_mirrors/ng/ng-zorro-antd点击查看免费下载导读本文围绕 ng-zorro-antd 组件库中 Resizable可调整尺寸组件 的「栅格Grid」演示展开讲解如何让拖拽缩放按 24 栅格列系统吸附、结合nz-col实现两列联动布局。读完本文你将掌握nzGridColumnCount、nzMinColumn、nzMaxColumn三个栅格核心参数的使用方式、事件回调中col字段的计算逻辑以及cursorType: grid光标模式与nz-resize-handles的组合用法并能在自己的 Angular 页面中直接复刻该联动布局。一、演示文档与源码定位官方演示文档 components/resizable/demo/grid.md 对该示例的描述非常简洁「配合栅格使用 / Resize with grid.」——即把 Resizable 的缩放行为与 ng-zorro-antd 的 24 栅格系统NzGridModule整合拖拽过程中元素宽度不是任意像素值而是按栅格列column为单位跳变从而保证布局始终对齐栅格。其配套实现位于 components/resizable/demo/grid.ts完整展示了该场景的最小可运行代码。组件库官方 API 文档位于 components/resizable/doc/index.en-US.md其中[nzGridColumnCount]、[nzMinColumn]、[nzMaxColumn]正是栅格模式的核心输入属性。二、栅格模式核心实现原理栅格化的本质在指令 components/resizable/resizable.directive.ts 的calcSize方法中体现。该方法以nzGridColumnCount是否等于-1作为是否进入栅格模式的开关源码见 resizable.directive.ts#L62-L63 与 resizable.directive.ts#L149-L153Input({ transform: numberAttribute }) nzGridColumnCount: number -1; Input({ transform: numberAttribute }) nzMaxColumn: number -1; Input({ transform: numberAttribute }) nzMinColumn: number -1;当nzGridColumnCount ! -1时拖拽逻辑按以下三步处理计算单列宽度spanWidthspanWidth maxWidth / nzGridColumnCount其中maxWidth是受边界nzBounds约束后的最大宽度即把可缩放区域等分为nzGridColumnCount份换算最小/最大列数minWidth nzMinColumn ! -1 ? spanWidth * nzMinColumn : minWidthmaxWidth nzMaxColumn ! -1 ? spanWidth * nzMaxColumn : maxWidth将列数限制转换为像素限制取整吸附在尺寸计算完成后执行col Math.round(newWidth / spanWidth); newWidth col * spanWidth;resizable.directive.ts#L174-L177保证最终宽度始终是单列宽度的整数倍。计算完成后返回的事件对象中包含col字段interface NzResizeEvent { width?: number; height?: number; col?: number; mouseEvent?: MouseEvent | TouchEvent; direction?: NzResizeDirection; }该接口定义在 resizable.directive.ts#L31-L37演示代码正是从nzResize事件中解构出col并驱动页面布局。三、栅格联动布局完整示例拆解以 components/resizable/demo/grid.ts 为蓝本一个「左列可拖拽、右列自动补位」的布局模板如下div nz-row div classcol nz-col nz-resizable (nzResize)onResize($event) [nzMinColumn]3 [nzMaxColumn]20 [nzGridColumnCount]24 [nzSpan]col() nz-resize-handles [nzDirections]directions() / col-{{ col() }} /div div classcol right nz-col [nzSpan]24 - col()col-{{ 24 - col() }}/div /div对应组件逻辑export class NzDemoResizableGridComponent { readonly col signal(8); id -1; readonly directions signalNzResizeHandleOption[]([ { direction: right, cursorType: grid } ]); onResize({ col }: NzResizeEvent): void { cancelAnimationFrame(this.id); this.id requestAnimationFrame(() { this.col.set(col!); }); } }关键设计点双向联动左列nzSpan绑定col()右列nzSpan绑定24 - col()。因为 24 栅格系统一行的span总和固定为 24拖拽左列时右列自动补满剩余栅格形成「此消彼长」的联动效果拖拽方向与光标nz-resize-handles只声明了right方向并将cursorType设为gridNzResizeHandleOption接口定义见 resize-handles.component.ts#L21-L24。cursorType: grid会为手柄挂上nz-resizable-handle-cursor-type-grid类见 resize-handle.component.ts#L53-L54提示用户该手柄按栅格步进而非自由缩放性能优化onResize中使用cancelAnimationFramerequestAnimationFrame合并帧避免高频拖拽事件导致频繁变更检测这是演示代码中值得借鉴的实践。四、栅格参数详解与默认值结合 components/resizable/doc/index.en-US.md 的 API 表与 resizable.directive.ts 源码栅格模式相关参数如下属性说明类型默认值[nzGridColumnCount]栅格列数设为-1表示不启用栅格模式number-1[nzMinColumn]可缩放的最小列数number-1不限制退化为像素级nzMinWidth[nzMaxColumn]可缩放的最大列数number-1不限制[nzBounds]缩放边界可选window \| parent \| ElementRefHTMLElement-parent[nzMinWidth]/[nzMinHeight]像素级最小宽/高栅格模式下未设置列限制时兜底使用number40(nzResize)拖拽过程中触发事件含col字段EventEmitterNzResizeEvent-使用建议nzGridColumnCount通常与 Ant Design 栅格系统的 24 列保持一致即设为24与nz-col的nzSpan语义对齐设置了列数限制nzMinColumn/nzMaxColumn后像素级nzMinWidth/nzMaxWidth会被列宽覆盖resizable.directive.ts#L151-L152拖拽中拿到的事件col是经过Math.round四舍五入后的整数可直接用于nzSpan绑定。五、测试用例验证栅格行为仓库自带单元测试 components/resizable/resizable.spec.ts 的griddescribe 块resizable.spec.ts#L531-L589直接复用了NzDemoResizableGridComponent演示组件验证了两个关键行为列数限制生效向左拖拽到极限时expect(testComponent.col()).toBe(3)即宽度被nzMinColumn拦截至 3 列向右拖拽到极限时expect(testComponent.col()).toBe(20)即被nzMaxColumn限制在 20 列resizable.spec.ts#L543-L576光标类型切换cursorType: grid时元素上存在nz-resizable-handle-cursor-type-grid类而不存在-window类切换为window后类名随之翻转resizable.spec.ts#L578-L589。测试通过模拟mousedown 文档级mousemove/mouseup事件链来驱动缩放流程——这正是NzResizableService的运行时行为手柄mousedown后服务在 document 上挂载mousemove/mouseup监听器并在runOutsideAngular中执行以降低变更检测开销见 resizable.service.ts#L34-L55。因此测试与真实交互共享同一套事件管线验证结论对实际行为具备较强说服力。六、样式定制栅格模式不引入额外样式手柄外观由组件库内置的.nz-resizable-handle系列类控制style。官方文档建议通过覆盖以下类来定制见 components/resizable/doc/index.en-US.md 的 Styling 一节.nz-resizablenz-resizable指令命名空间.nz-resizable-handle手柄命名空间含 8 个方向类-top、-right、-bottom、-left、-topRight、-bottomRight、-bottomLeft、-topLeft.nz-resizable-handle-cursor-type-grid栅格光标类型命名空间演示中拖拽手柄即使用该类。需要单独引入组件样式时可在全局样式中加入import node_modules/ng-zorro-antd/resizable/style/entry.less;七、进阶提示栅格模式可与 nzPreview预览幽灵元素配合使用拖拽时先展示吸附后的栅格尺寸再落位视觉反馈更直观演示中的requestAnimationFrame节流模式适用于所有 Resizable 场景basic.ts 同样采用该写法建议在实际项目中保留若需要更多拖拽方向如左右双向只需扩展nzDirections数组每个元素可以是NzResizeDirection字符串或NzResizeHandleOption对象字符串会被规范化为cursorType: window见 resize-handles.component.ts#L26-L37。总结ng-zorro-antd Resizable 的栅格模式通过「列数 → 像素 → 取整吸附」三步转换把自由拖拽约束到 24 栅格体系内配合nz-col的 span 联动即可构建出对齐规范、体验良好的可调布局。核心参数nzGridColumnCount/nzMinColumn/nzMaxColumn的语义、事件col字段的计算方式以及源码与测试中的验证路径已在本文完整展开可直接对照 演示源码 与 核心指令 落地实践。赞分享UI组件前端【免费下载链接】ng-zorro-antdAngular UI Component Library based on Ant Design项目地址https://gitcode.com/gh_mirrors/ng/ng-zorro-antd点击查看免费下载相关推荐ng-zorro-antd Grid 栅格布局系统完全指南24 栅格原理、Flex 排列与响应式断点实战ng zorro antd Grid 栅格布局系统完全指南24 栅格原理、Flex 排列与响应式断点实战 本指南以 ng zorro antd 组件库中的 GUI组件前端ng-zorro-antd 栅格卡片实战用 Card 与 Grid 24 栅格体系搭建系统概览页ng zorro antd 栅格卡片实战用 Card 与 Grid 24 栅格体系搭建系统概览页 在系统概览类页面中卡片 栅格列是最经典的组合形态UI组件前端ng-zorro-antd 基础栅格Basic Grid实战指南用 nz-row 与 nz-col 构建 24 栅格布局ng zorro antd 基础栅格Basic Grid实战指南用 nz row 与 nz col 构建 24 栅格布局 ng zorro antd 的UI组件前端上一篇深入解读 Sass 官方语言规范从作用域模型到编译执行管线spec/README.md 全解析下一篇LeetCode-Solutions-in-Good-Style贪心算法实战应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

inpaint-web:免安装,浏览器修图与无损放大 3 步搞定 2026/9/28 3:37:26

inpaint-web:免安装,浏览器修图与无损放大 3 步搞定

inpaint-web:免安装,浏览器修图与无损放大 3 步搞定 【免费下载链接】inpaint-web A free and open-source inpainting & image-upscaling tool powered by webgpu and wasm on the browser。| 基于 Webgpu 技术和 wasm 技术的免费开源 inpainting &…

阅读更多 →
用 Python 对比等额本金与等额本息:总利息差与月供递减节奏 2026/9/28 3:37:25

用 Python 对比等额本金与等额本息:总利息差与月供递减节奏

用 Python 对比等额本金与等额本息:总利息差与月供递减节奏选按揭方式时,等额本金与等额本息的差别常被概括成"前者利息少、后者月供低",但差距具体有多少、月供曲线长什么样,多数介绍止步于一句定性描述。本文由深工优…

阅读更多 →
ng-zorro-antd Steps 组件竖直方向步骤条:从 `nzDirection` 到样式与状态管理的完整指南 2026/9/28 3:37:06

ng-zorro-antd Steps 组件竖直方向步骤条:从 `nzDirection` 到样式与状态管理的完整指南

UI组件前端 【免费下载链接】ng-zorro-antd Angular UI Component Library based on Ant Design 项目地址: https://gitcode.com/gh_mirrors/ng/ng-zorro-antd 点击查看 免费下载 本文以 ng-zorro-antd(基于 Ant Design 的 Angular UI 组件库&#xff0…

阅读更多 →
用 Python 测算现房项目的两种价格口径:以龙岗吉华某现房项目公开数据为例 2026/9/28 3:36:59

用 Python 测算现房项目的两种价格口径:以龙岗吉华某现房项目公开数据为例

用 Python 测算现房项目的两种价格口径:以龙岗吉华某现房项目公开数据为例看一个在售项目,公开渠道常能同时查到两种单价:一是公示体系里的备案均价,二是公开自媒体口径的市场参考价,两者可能相差不小。用哪个口径做预…

阅读更多 →
从昆虫数据集到YOLO训练:txt/xml双格式标注与混淆矩阵修复实战 2026/9/28 3:36:59

从昆虫数据集到YOLO训练:txt/xml双格式标注与混淆矩阵修复实战

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

阅读更多 →
ForgeCode Agent 开发指南:基于 AGENTS.md 的 Rust 代码库协作规范与实践 2026/9/28 3:36:52

ForgeCode Agent 开发指南:基于 AGENTS.md 的 Rust 代码库协作规范与实践

人工智能AI Agent代码智能体AI 应用CLI开发工具 【免费下载链接】forgecode AI enabled pair programmer for Claude, GPT, O Series, Grok, Deepseek, Gemini and 300 models 项目地址: https://gitcode.com/gh_mirrors/forge39/forgecode 点击查看 免费下载 导读…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉