V3 Bento
A simple bento layout component for Vue3.
Installation
Usage
Wrap the child component to be dragged with the Bento and BentoItem components.
<!-- Usage.vue -->
<Bento
:bentoCells="bentoCells"
class="!h-[610px] overflow-y-auto overflow-x-hidden p-[10px] box-content"
:size="140"
:disabled="false"
:gap="10"
:maximum-cells="4"
@drag-end="(e: any) => console.log(e)"
@drag-start="(e: any) => console.log(e)"
>
<BentoItem
v-for="item in bentoCells"
:key="item.id"
:id="item.id"
:x="item.x"
:y="item.y"
:width="item.width"
:height="item.height"
>
<Cell :url="'./' + item.id + '.svg'" :bg="'#fff'" />
</BentoItem>
</Bento>
Demo
Properties
<Bento />
| Prop | Type | Default | Require | Default |
|---|
| bentoCells | BentoItemProps[] | | true | 每个格子 |
|---|
| maximumCells | number | | true | 每一行最大格子数量 |
|---|
| size | number | | true | 格子的大小 |
|---|
| gap | number | 10 | false | 格子的间距 |
|---|
| disabled | boolean | false | false | 是否禁用拖拽 |
|---|
| commonClass | string | `bento-item` | false | 格子的类名 |
|---|
<BentoItem />
| Prop | Type | Default | Require | Default |
|---|
| id | string | | true | 格子的 ID |
|---|
| x | number | 0 | true | 格子的 x 轴坐标 |
|---|
| y | number | 0 | true | 格子的 y 轴坐标 |
|---|
| width | number | 1 | false | 每个单元格在 X 方向上占多大的格子 |
|---|
| height | number | 1 | false | 每个单元格在 Y 方向上占多大的格子 |
|---|
Events
<Bento />
| Name | Return | Description |
|---|
| dragStart | cell | 拖拽开始,返回选中拖拽的那个格子对象 |
|---|
| dragEnd | bentoCells | 拖拽结束,返回排序后的 bentoCells 数组 |
|---|
Slot
<Bento />
| Name | Required | Description |
|---|
| bento-item-placeholder | false | 拖拽的时候的占位要素 |
|---|
| empty | false | 数组对象要是为空显示的 DOM |
|---|