🌈a beautify polyfill for html5 native drag!
Remove translucent preview!
- light and beautiful
- native and no dependence
- progressive enhancement and no side effects
- cross framework
Import the library code
<script src="./lib/draggable-polyfill.js"></script>
npm install draggable-polyfill
then these native draggable elements( [draggable=true]
,img
) will becoming beautiful
[allowdrop]
elements will receive drag event data.
<div draggable="true">drag me</div>
<img src="./avator" alt="avator">
<!--dropbox-->
<div allowdrop></div>
you can use HTML Drag and Drop API
//draggable
draggable.addEventListener('dragstart',()=>{})
draggable.addEventListener('drag',()=>{})
draggable.addEventListener('dragend',()=>{})
//allowdrop
allowdrop.addEventListener('dragover',()=>{})
allowdrop.addEventListener('dragenter',()=>{})
allowdrop.addEventListener('dragleave',()=>{})
allowdrop.addEventListener('drop',()=>{})
draggable elements will add props dragging
and dropbox will add props over
under dragging, so you can custom style through CSS
<!--your draggable element-->
<div class="dragbox" draggable="true">drag me</div>
<!--your allowdrop element-->
<div class="dropbox" allowdrop></div>
/**custom styles**/
.dragbox[dragging]{
box-shadow: 5px 5px 15px rgba(0, 0, 0, .2);
}
.dropbox[over]{
border-color: red;
}
you can set axis=X|Y
to limit drag direction or press shift
key when dragging.
<div axis="X" draggable="true">drag me</div>
- Chrome
- Firefox
- Safari
Note:This polyfill works on Chrome and Firefox, not for IE( IE is not supports setDragImage
), it will keep default effect.
MIT