Drag and drop in Vue List box component
11 Jun 202411 minutes to read
The ListBox has support to drag an item or a group of selected items and drop it within the same list box or into another list box.
The elements can be customized on drag and drop by using the following events,
Events | Description |
---|---|
dragStart |
Triggers when the selected element is being dragged. |
drag |
Triggers when the selected element is being dragged. |
drop |
Triggers when the selected element is being dropped. |
Single listbox
To drag and drop an item or group of item within the list box can be achieved by setting allowDragAndDrop
property as true
.
The following sample illustrates how to drag and drop an item within the same list box by enabling allowDragAndDrop
property.
<template>
<div id='container' style="margin:10px auto 0; width:250px;">
<ejs-listbox :dataSource='data' :allowDragAndDrop="true" :fields="fields"></ejs-listbox>
</div>
</template>
<script setup>
import { ListBoxComponent as EjsListbox } from "@syncfusion/ej2-vue-dropdowns";
const data = [
{ "Name": "Australia", "Code": "AU" },
{ "Name": "Bermuda", "Code": "BM" },
{ "Name": "Canada", "Code": "CA" },
{ "Name": "Cameroon", "Code": "CM" },
{ "Name": "Denmark", "Code": "DK" },
{ "Name": "France", "Code": "FR" },
{ "Name": "Finland", "Code": "FI" },
{ "Name": "Germany", "Code": "DE" },
{ "Name": "Hong Kong", "Code": "HK" }
];
const fields = { text: "Name" };
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-inputs/styles/material.css";
@import "../node_modules/@syncfusion/ej2-vue-dropdowns/styles/material.css";
</style>
<template>
<div id='container' style="margin:10px auto 0; width:250px;">
<ejs-listbox :dataSource='data' :allowDragAndDrop="true" :fields="fields"></ejs-listbox>
</div>
</template>
<script>
import { ListBoxComponent } from "@syncfusion/ej2-vue-dropdowns";
export default {
name: "App",
components: {
"ejs-listbox": ListBoxComponent
},
data() {
return {
data: [
{ "Name": "Australia", "Code": "AU" },
{ "Name": "Bermuda", "Code": "BM" },
{ "Name": "Canada", "Code": "CA" },
{ "Name": "Cameroon", "Code": "CM" },
{ "Name": "Denmark", "Code": "DK" },
{ "Name": "France", "Code": "FR" },
{ "Name": "Finland", "Code": "FI" },
{ "Name": "Germany", "Code": "DE" },
{ "Name": "Hong Kong", "Code": "HK" }
],
fields: { text: "Name" }
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-inputs/styles/material.css";
@import "../node_modules/@syncfusion/ej2-vue-dropdowns/styles/material.css";
</style>
Multiple listbox
To drag and drop an item or group of item between two list boxes can be achieved by setting allowDragAndDrop
property as true
and scope
property should be set to both the list boxes.
In the following sample, the allowDragAndDrop
property is set as true
and scope
is set as combined-list
to enable drop and drop in both list boxes.
<template>
<div id='container' style="margin:10px auto 0; width:250px;">
<div class="listbox1">
<h4>Group A</h4>
<ejs-listbox id="listbox1" :dataSource='groupA' :allowDragAndDrop="true" :fields="fields"
scope="combined-list"></ejs-listbox>
</div>
<div class="listbox2">
<h4>Group B</h4>
<ejs-listbox id="listbox2" :dataSource='groupB' :allowDragAndDrop="true" :fields="fields"
scope="combined-list"></ejs-listbox>
</div>
</div>
</template>
<script setup>
import { ListBoxComponent as EjsListbox } from "@syncfusion/ej2-vue-dropdowns";
const groupA = [
{ "Name": "Australia", "Code": "AU" },
{ "Name": "Bermuda", "Code": "BM" },
{ "Name": "Canada", "Code": "CA" },
{ "Name": "Cameroon", "Code": "CM" },
{ "Name": "Denmark", "Code": "DK" },
{ "Name": "France", "Code": "FR" },
{ "Name": "Finland", "Code": "FI" },
{ "Name": "Germany", "Code": "DE" },
{ "Name": "Hong Kong", "Code": "HK" }
];
const groupB = [
{ "Name": "India", "Code": "IN" },
{ "Name": "Italy", "Code": "IT" },
{ "Name": "Japan", "Code": "JP" },
{ "Name": "Mexico", "Code": "MX" },
{ "Name": "Norway", "Code": "NO" },
{ "Name": "Poland", "Code": "PL" },
{ "Name": "Switzerland", "Code": "CH" },
{ "Name": "United Kingdom", "Code": "GB" },
{ "Name": "United States", "Code": "US" }
];
const fields = { text: "Name" }
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-inputs/styles/material.css";
@import "../node_modules/@syncfusion/ej2-vue-dropdowns/styles/material.css";
.listbox1 {
float: left;
width: 48%;
}
.listbox2 {
float: right;
width: 48%;
}
</style>
<template>
<div id='container' style="margin:10px auto 0; width:250px;">
<div class="listbox1">
<h4>Group A</h4>
<ejs-listbox id="listbox1" :dataSource='groupA' :allowDragAndDrop="true" :fields="fields"
scope="combined-list"></ejs-listbox>
</div>
<div class="listbox2">
<h4>Group B</h4>
<ejs-listbox id="listbox2" :dataSource='groupB' :allowDragAndDrop="true" :fields="fields"
scope="combined-list"></ejs-listbox>
</div>
</div>
</template>
<script>
import { ListBoxComponent } from "@syncfusion/ej2-vue-dropdowns";
export default {
name: "App",
components: {
"ejs-listbox": ListBoxComponent
},
data() {
return {
groupA: [
{ "Name": "Australia", "Code": "AU" },
{ "Name": "Bermuda", "Code": "BM" },
{ "Name": "Canada", "Code": "CA" },
{ "Name": "Cameroon", "Code": "CM" },
{ "Name": "Denmark", "Code": "DK" },
{ "Name": "France", "Code": "FR" },
{ "Name": "Finland", "Code": "FI" },
{ "Name": "Germany", "Code": "DE" },
{ "Name": "Hong Kong", "Code": "HK" }
],
groupB: [
{ "Name": "India", "Code": "IN" },
{ "Name": "Italy", "Code": "IT" },
{ "Name": "Japan", "Code": "JP" },
{ "Name": "Mexico", "Code": "MX" },
{ "Name": "Norway", "Code": "NO" },
{ "Name": "Poland", "Code": "PL" },
{ "Name": "Switzerland", "Code": "CH" },
{ "Name": "United Kingdom", "Code": "GB" },
{ "Name": "United States", "Code": "US" }
],
fields: { text: "Name" }
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-inputs/styles/material.css";
@import "../node_modules/@syncfusion/ej2-vue-dropdowns/styles/material.css";
.listbox1 {
float: left;
width: 48%;
}
.listbox2 {
float: right;
width: 48%;
}
</style>