Drag and drop
Bootstrap 5 Drag and drop plugin
Drag and Drop plugin built with Bootstrap 5. Examples of draggable list, cards, tables, grid, buttons. Available sort, copy, scroll, disable, delay, nested & other options.
Note: Read the API tab to find all available options and advanced customization
Try out MDB Drag & Drop Builder
Draggable basic example
By adding draggable-element class name you can make your custom element
draggable.
Drag me!
Custom container
If you want to have your draggable component in a container, just add
data-mdb-container
attribute with selector to your component.
Drag me!
Blocked axis
Thanks to data-mdb-block-x-axis attribute or
data-mdb-block-y-axis attribute you can disable x or y axis.
Drag me!
Drag me!
Delay
You can set deley of starting dragging by adding
data-mdb-delay attribute with miliseconds value.
Drag me after one second!
Disabled
You can set your draggable element as disabled by adding
data-mdb-disabled with true value.
Disabled
Scrolling option
When your draggable element is inside a scrollable container your component will scroll its while you will be near the edge.
Drag!
Sortable basic example
By adding data-mdb-sortable with sortable value to your list, you
will make its sortable. Note, only elements with sortable-item class name will be
able to sort.
Horizontal example
Sortable list will create no matter how rotated it is.
Grid example
Sortable list works with grid as well.
Multiple tables
By adding data-mdb-connected-list attribute you can connect your list with other.
Note, you has to set value as selector when you initialize your component via data attributes.
To do
Done
Coping items
By adding data-mdb-copy with value true you can copy your items to
connected table.
Elements
Copy
Conditions
You can set your own conditions about permission to sending or coping items to connected table
by adding your custom function with true / false return to
enterPredicate property. Note, you can only initialize it via JavaScript.
Numbers
Only odd numbers
Disabled sorting
By adding data-mdb-sorting with false value you can disable sorting
in table.
Sorting available
Sorting not available
Nested
By adding data-mdb-item-class you can set what class has to be in your list item
to make them sortable. Thanks to that you can make nested lists.
To do
Done
Drag and drop - API
Usage
Via data attributes
<!-- Draggable -->
<div class="draggable-element"></div>
<!-- Sortable -->
<div data-mdb-sortable="sortable">
<div class="sortable-item">Item 1</div>
<div class="sortable-item">Item 2</div>
<div class="sortable-item">Item 3</div>
<div class="sortable-item">Item 4</div>
<div class="sortable-item">Item 5</div>
</div>
Via JavaScript
// Draggable
const draggableEl = document.getElementById('draggable');
const instanceDraggable = new DragAndDrop.Draggable(draggableEl, {
...options,
});
// Sortable
const sortableEl = document.getElementById('sortable');
const instanceSortable = new DragAndDrop.Sortable(sortableCondition1, {
...options
});
Via jQuery
Note: By default, MDB does not include jQuery and you have to add it to the project on your own.
// Draggable
$('#draggable').Draggable();
// Sortable
$('#sortable').Sortable();
Options
Options can be passed via data attributes, JavaScript, or jQuery. For data attributes, append
the option name to data-mdb-, as in data-mdb-zoom-level="". The
img and caption attributes should be pinned directly to the
thumbnails, not to the lightbox wrapper element.
Draggable
| Name | Type | Default | Description |
|---|---|---|---|
blockXAxis
|
Boolean | false |
Defines whether 'x' axis is blocked or not |
blockYAxis
|
Boolean | false |
Defines whether 'y' axis is blocked or not |
container
|
String | body |
Defines container of dragging element |
delay
|
Number | 0 |
Defines how long will deley exist before element starts to drag |
disabled
|
Boolean | false |
Defines whether element is able to drag or not |
disabled
|
Boolean | false |
Defines whether element is able to drag or not |
dragHandle
|
String | '' |
Defines drag handler of the element. Note, handler has to be inside of the dragging element |
draggingClass
|
String | dragging |
Defines class which is using during dragging of the element |
scrollPixels
|
Number | 40 |
If container is scrollable, defines distance from edges where scrolling will begin |
Sortable
| Name | Type | Default | Description |
|---|---|---|---|
animationDuration
|
Number | 300 |
Defines duration of sliding and returning animations |
connectedList
|
Element / Null / String' | null |
Defines list which you want to connect with |
copy
|
Boolean | false |
Defines whether you want to copy elements from one list to another or send them instead |
enterPredicate
|
Function | () => true |
Defines function which check access between tables |
itemClass
|
String | sortable-item |
Defines class name for sortable items. |
sorting
|
Boolean | true |
Defines whether list is able to sort or not |
Methods
Draggable
resetPosition
|
- | Return original position of the element |
instanceDraggable.resetPosition()
|
getInstance |
element | Static method which allows you to get the draggable instance associated to a DOM element. | Draggable.getInstance(draggableElement) |
const draggableElement = document.getElementById('draggable');
const instanceDraggable = Draggable.getInstance(draggableElement);
instanceDraggable.resetPosition();
Sortable
addItem |
element, index | Adds element to the sortable list. You can set position in the list of your new item by adding index number. Note: If you did not insert an index number, your element would append at the end of the list. |
instanceSortable.addIem(el, 2)
|
getInstance |
element | Static method which allows you to get the sortable instance associated to a DOM element. | Sortable.getInstance(sortableElement) |
const newElement = document.createElement('div');
newElement.classList.add('sortable-item');
newElement.textContent = 'New Element';
const sortableElement = document.getElementById('sortable');
const instanceSortable = Sortable.getInstance(sortableElement);
instanceSortable.addIem(newElement);
Events
Draggable
| Name | Description |
|---|---|
start.mdb.draggable
|
Emitted when an element is started dragging |
end.mdb.draggable
|
Emitted when an element is ended dragging |
move.mdb.draggable
|
Emitted when an element is dragging |
const draggableItem = document.getElementById('dragging');
draggableItem.addEventListener('start.mdb.draggable', () => alert('Start dragging'));
Sortable
| Name | Description |
|---|---|
move.mdb.sortable
|
Emitted when one of the itmes from list changed its position. |
exit.mdb.sortable
|
Emitted when one of the items from list will enter to connected table. |
const sortableItem = document.getElementById('sortable-item-1');
sortableItem.addEventListener('move.mdb.sortable', (e) => alert(e.target));
Import
DRAG AND DROP also works with module bundlers. Use the following code to import this component:
import { Draggable, Sortable } from 'mdb-drag-and-drop';