矩形空间家具布置系统 – 开发技术报告
项目背景与简介
“矩形空间家具布置系统”是基于 Web 的轻量级 2D 室内排版编辑工具,提供符合物理比例的平面设计沙箱。用户可自定义房间尺寸,通过拖拽布置标准家具、门窗及可拉伸隔墙。
本系统摒弃繁重框架与第三方图形库,纯基于原生 DOM 与现代 Web API 构建,实现了高效渲染与流畅交互,为轻量级网页 CAD 应用提供了优秀的架构范式。
核心技术栈
- 结构层:HTML5,采用表现与数据分离(Data-View Separation)架构。
- 样式层:CSS3 + Tailwind CSS。利用 CSS 变量实现无冲突动画,结合
resize属性实现原生拉伸。 - 逻辑层:原生 JavaScript。零依赖,利用 DOM API、Pointer Events 及 ResizeObserver 实现核心交互。
核心架构与关键技术实现
动态比例尺渲染引擎
为解决大尺寸房间或跨设备导致的内容溢出问题,系统引入动态比例尺机制:
- 全局映射:维护
PIXELS_PER_METER核心变量。 - 自适应算法:监听视口变化,运用
Math.min(scaleX, scaleY)动态推导使房间完全可见的最大比例尺。 - 数据驱动:元素绑定真实物理数据(单位:米),屏幕像素仅为基于当前比例尺的渲染表现。
物理体积互换取代视觉旋转
弃用易导致包围盒计算偏差的 CSS transform: rotate()。当触发“双击旋转”时,直接在数据层面对调元素的物理宽高。此举确保 DOM 包围盒始终贴合物理轮廓,彻底解决了碰撞错位与拉伸方向混乱等图形学难题。
智能磁吸辅助线系统
内置高效磁吸对齐引擎:拖拽时实时计算元素的水平与垂直基准线。一旦与场景内其他元素的基准线距离小于设定阈值(SNAP_DIST = 12px),即强制修正坐标完成“吸附”,并显示绝对定位的红色十字辅助线提供视觉反馈。
隔墙动态拉伸与锚点固定
结合 CSS3 resize 与 ResizeObserver API,实现隔墙原生拉伸并将像素变化反算为物理尺寸存入数据。通过设置 transform-origin: left center; 锚定原点,避免宽度变化导致的“两端晃动”,实现“钉死一端、延伸另一端”的稳定交互。
交互优化与安全防呆设计
为保障系统稳定性与数据安全,实施了以下防呆设计(Error Prevention):
- 输入边界限制:对用户输入的各项尺寸进行严格拦截与格式化,设定安全范围(如 1m 至 18m),防止极端数值导致渲染引擎崩溃(前端 DoS 级防御)。
- 状态按钮防误触:“一键清空”功能摒弃易被沙箱拦截的
confirm()弹窗,采用纯前端状态机与setTimeout定时器。要求用户在 3 秒内“二次确认”,实现安全防误触。 - 右键快捷删除:拦截原生上下文菜单(
contextmenu)并转化为删除操作,辅以scale(0)过渡动画,兼顾操作效率与优雅。
总结与展望
本系统验证了以原生 Web 技术构建复杂图形编辑器的可行性,其轻量、数据驱动的架构具备极强的可扩展性。
未来拓展方向:
- 数据持久化:将
data-m-*数据序列化为 JSON,存储至本地或后端数据库,实现方案存取。 - 2D 转 3D 预览:将 JSON 数据接入 Three.js 引擎,一键生成三维空间漫游。
- BOM 表格导出:提取场景数据,自动生成“家具物料清单”并支持导出为 Excel/PDF。