Skip to content
On this page

@sepveneto/free-dom ​

free-dom ​

主要用于快速实现dom元素的拖曳和缩放功能,利用FreeScene可以额外实现边缘吸附和区域限制功能。

INFO

缩放和拖曳的最小移动单位是1px

DANGER

请务必不要在.vv-free-dom--scene上设置影响其宽度或高度的样式,比如border,否则会导致其陷入不断计算宽度和高度的死循环中

属性 ​

INFO

如果元素创建之初可以确定它的大小,可以禁用autoSize来优化性能

名称类型必填默认值可选值说明
v-model/model-valueobject❌--元素的位置及尺寸
v-model:x/xnumber❌--元素在x轴上的位置
v-model:y/ynumber❌--元素在y轴上的位置
v-model:w/wnumber❌--元素的宽度
v-model:h/hnumber❌--元素的高度
activeboolean❌-boolean手动控制元素的选中与否,仅影响样式
lock-aspect-ratioboolean❌false-缩放时是否按当前宽高比计算
handlestring❌--通过class或id指定允许触发拖曳的元素
maskboolean❌true-拖曳元素是否有遮罩层
drag-start-fnCoreFnCallback❌--拖曳开始的回调函数
drag-fnCoreFnCallback❌--拖曳时的回调函数
drag-stop-fnCoreFnCallback❌--拖曳结束的回调函数
resize-start-fnResizeFnCallback❌--缩放开始的回调函数
resize-fnResizeFnCallback❌--缩放时的回调函数
resize-stop-fnResizeFnCallback❌--缩放结束的回调函数
auto-sizeboolean❌true-是否在初次渲染时根据当时的元素尺寸自动计算宽高
min-widthnumber❌50-缩放的最小宽度,单位px
min-heightnumber❌50-缩放的最小高度,单位px
disabled-dragboolean❌false-是否禁用拖曳功能
disabled-resizeboolean❌false-是否禁用缩放功能
scalearray❌-enum允许缩放的方向
fix-non-monospacedboolean❌false-是否在初次渲染是等待字体加载完成再计算尺寸(主要是针对非等宽字体)
keyboardboolean❌false-是否允许通过键盘的方向键来控制选中元素的移动
disabled-selectboolean❌false-是否屏蔽选中操作

方法 ​

名称参数说明
syncSize-重新根据内部元素大小计算宽高(需要关闭auto-size)

事件 ​

名称参数说明
drop(evt: DragEvent) => void外部可拖曳元素被放置时触发
select(isSelect: boolean) => void元素被选中或取消选中时触发

free-scene 属性 ​

名称类型必填默认值可选值说明
diffnumber❌2-触发吸附的距离,单位px
manual-diffboolean❌false-开启后默认不会进行吸附,需要通过按住shift来暂时启用
show-lineboolean❌true-显示对齐参考线
min-widthnumber❌50-元素缩放的最小宽度,单位px
min-heightnumber❌50-元素缩放的最小高度,单位px
fix-non-monospacedboolean❌false-所有元素是否在初次渲染是等待字体加载完成再计算尺寸(主要是针对非等宽字体)
disabled-dragboolean❌false-是否禁用所有元素的拖曳功能
disabled-resizeboolean❌false-是否禁用所有元素的缩放功能
disabled-selectboolean❌false-是否禁用所有元素的选中功能
disabled-batchboolean❌false-是否禁用批量选择
scalearray❌-['t', 'r', 'l', 'b', 'lt', 'lb', 'rt', 'rb']所有元素允许缩放的方向
lock-aspect-ratioboolean❌false-所有元素缩放时是否按当前宽高比计算
auto-expandboolean | number | Object❌--是否在元素到达边界时自动扩展宽度或高度, 如果设置开启,默认自动扩展10px

free-scene 事件 ​

事件名详情类型
batch-select批量框选结束时触发(pos: Pos) => void

grid-layout ​

严重参考了react-grid-layout的代码,同时只实现了部分功能。

属性 ​

名称类型必填默认值可选值说明
v-model/model-valueobject✔️️--布局参数
colsnumber❌12-栅格的列数
max-rowsnumber❌Infinity-栅格的行数
min-wnumber❌1-元素缩放的最小宽度
min-hnumber❌1-元素缩放的最小高度
row-heightnumber❌150-栅格的行高
marginnumber[]❌[10, 10]-元素之间的间隔,[水平方向,垂直方向]
container-paddingnumber[]❌--布局的内边距,[水平方向,垂直方向]
disabled-dragboolean❌false-禁用元素拖曳
disabled-resizeboolean❌false-禁用元素缩放
collisionboolean❌false-启用元素碰撞

item属性 ​

名称类型必填默认值可选值说明
istring | number✔️--布局元素的唯一标识
xnumber✔--x轴的位置
ynumber✔--y轴的位置
wnumber✔--宽度
hnumber✔--高度
staticboolean❌--是否为静态元素
scalearray❌['rb']['t', 'r', 'l', 'b', 'lt', 'lb', 'rt', 'rb']元素允许缩放的方向