vuedraggable禁止拖出所在区域
时间: 2023-09-24 14:05:58 浏览: 144
要禁止用户将vuedraggable中的元素拖出其所在的区域,你可以使用vuedraggable提供的`draggable`和`group`属性,以及原生的HTML5拖放事件。具体步骤如下:
1. 在vuedraggable组件中添加`draggable`和`group`属性,如下所示:
```html
<draggable v-model="list" :draggable="'.item'" :group="{ name: 'items' }">
<div class="item" v-for="(item, index) in list" :key="item.id">{{ item.name }}</div>
</draggable>
```
其中,`draggable`属性指定了可拖拽的元素选择器,这里我们指定为`.item`,表示只有类名为`item`的元素可以被拖拽。`group`属性指定了拖拽元素所属的组,这里我们指定为`{ name: 'items' }`,表示所有的拖拽元素都属于名为`items`的组。
2. 在vuedraggable组件的父元素上添加`dragover`和`drop`事件监听器,如下所示:
```html
<div class="container" @dragover.prevent @drop="onDrop">
<draggable v-model="list" :draggable="'.item'" :group="{ name: 'items' }">
<div class="item" v-for="(item, index) in list" :key="item.id">{{ item.name }}</div>
</draggable>
</div>
```
其中,`@dragover.prevent`表示阻止默认的拖放行为,`@drop="onDrop"`表示当拖拽元素被放置时,调用名为`onDrop`的方法。
3. 在vuedraggable组件的父组件中实现`onDrop`方法,如下所示:
```js
export default {
data() {
return {
list: [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' },
{ id: 3, name: 'Item 3' }
]
};
},
methods: {
onDrop(event) {
const container = event.target.closest('.container');
if (container !== this.$el) {
event.preventDefault();
}
}
}
}
```
其中,`event.target.closest('.container')`表示查找最近的`class`为`container`的父元素,如果找到的父元素不是vuedraggable组件的父元素,就阻止默认的拖放行为,从而禁止拖出所在区域。
阅读全文