@eight04/draggable-list
v0.3.0
Published
A tiny vanilla draggable list built with HTML5 drag-n-drop.
Downloads
109
Maintainers
Readme
draggable-list
A tiny vanilla draggable list built with HTML5 drag-n-drop.
Demo
https://eight04.github.io/draggable-list/
Installation
npm
npm install draggable-list
unpkg
<!-- export to global variable "DraggableList" -->
<script src="https://unpkg.com/eight04/draggable-list/dist/draggable-list.iife.js"></script>
import DraggableList from "https://unpkg.com/eight04/draggable-list/dist/draggable-list.es.js";
const ul = document.querySelector("#demo1");
new DraggableList(ul);
Compatibility
Prebuilt dist is compiled with babel to support Chrome 55.
API
This module exports a default member.
DraggableList
new DraggableList(el: Element, {scrollContainer?: Element} = {})
Convert an element to a draggable list.
By default, the script calculates cursor position via MouseEvent.pageY
. This won't work if the list is inside a scrollable container. Specify scrollContainer
so it can also calculate scrollContainer.scrollTop
.
Custom Events
d:dragstart
d:dragmove
d:dragend
e = {
detail: {
origin: Event,
dragTarget: Element,
// for d:dragmove
startPos: {x, y},
currentPos: {x, y},
// for d:dragend
originalIndex: Number,
spliceIndex: Number,
dropped: Boolean,
insertBefore?: Element
}
}
origin
- the rawDragEvent
.dragTarget
- the target that is being dragged. The parent ofdragTarget
is always the container.startPos
- mouse position relative to the page when drag starts.currentPos
- mouse position relative to the page when drag move.originalIndex
- the index ofdragTarget
.spliceIndex
- the index that can be used for splice, after removingdragTarget
from the list.insertBefore
- the element that can be used as the anchor ofElement.insertBefore
.dropped
- if false then the item is dropped outside the list or is canceled via Esc.
Changelog
0.3.0 (Dec 12, 2021)
- Fix: handle negative gap.
- Add:
scrollContainer
.
0.2.0 (Dec 10, 2021)
- Fix: catch dragenter & drop events.
- Change: now only support Chrome 55+.
0.1.0 (Dec 10, 2021)
- First release.