JSFiddle - React, Tailwind, and code Playground
by allcaps
HTML
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.11.4/themes/ui-darkness/jquery-ui.css">
<ul id="droppable" aria-label="Drop here:"></ul>
<ul id="draggables" aria-label="Click and drag:">
<li>One</li>
<li>Two</li>
<li>Three</li>
</ul>
<ul id="sortable">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
CSS
ul {
list-style-type: none;
margin: 0;
}
ul:before {
content:attr(aria-label);
color: white;
}
ul#draggables {
background-color: #333;
display: table;
padding: 12px;
}
ul#draggables li, ul#sortable li {
width: 100px;
height: 1em;
padding: 9px;
background: #ccc;
margin-bottom: .5em;
cursor: move;
}
ul#draggables li.highlight, ul#draggables li.ui-draggable-dragging {
background-color: lightblue;
}
ul#droppable {
position: absolute;
left: 250px;
top: 0;
width: 92px;
height: 92px;
background: #999;
color: #fff;
padding: 9px;
border: 3px solid #999;
}
#droppable.active {
border: 3px dashed black;
}
JavaScript
$("#draggables li").draggable({
// When a draggable is dragged than this helper
// creates and returns a new list containing multiple objects.
helper: function (event, ui) {
$(this).addClass('highlight');
var list = $.parseHTML('<ul></ul>');
$(list).append(
$('#draggables li.highlight').clone());
return list;
}
});
$("#sortable").sortable();
$("#draggables li").click(function () {
$(this).toggleClass("highlight");
});
$("#droppable").droppable({
// I think this could be a bit simpler for adding classes.
// But we need functions anyway to call other logic.
activate: function (event, ui) {
$(this).addClass('active');
},
deactivate: function (event, ui) {
$(this).removeClass('active');
},
drop: function () {
alert("dropped");
}
});