JSFiddle - React, Tailwind, and code Playground
HTML
<script src="http://dbushell.github.io/Nestable/jquery.nestable.js"></script>
<script src="https://unpkg.com/[email protected]/dist/dom-autoscroller.js"></script>
<script src="https://unpkg.com/[email protected]/dist/dom-autoscroller.js"></script>
<div class="dd" id="dd">
<ol class="dd-list">
<li class="dd-item" data-id="1">
<div class="dd-handle">Item 1</div>
</li>
<li class="dd-item" data-id="2">
<div class="dd-handle">Item 2</div>
</li>
<li class="dd-item" data-id="3">
<div class="dd-handle">Item 3</div>
<ol class="dd-list">
<li class="dd-item" data-id="4">
<div class="dd-handle">Item 4</div>
</li>
<li class="dd-item" data-id="5">
<div class="dd-handle">Item 5</div>
</li>
</ol>
</li>
<li class="dd-item" data-id="1">
<div class="dd-handle">Item 6</div>
</li>
<li class="dd-item" data-id="2">
<div class="dd-handle">Item 7</div>
</li>
<li class="dd-item" data-id="3">
<div class="dd-handle">Item 8</div>
<ol class="dd-list">
<li class="dd-item" data-id="4">
<div class="dd-handle">Item 9</div>
</li>
<li class="dd-item" data-id="5">
<div class="dd-handle">Item 10</div>
</li>
<li class="dd-item" data-id="1">
<div class="dd-handle">Item 1</div>
</li>
<li class="dd-item" data-id="2">
<div class="dd-handle">Item 2</div>
</li>
<li class="dd-item" data-id="3">
<div class="dd-handle">Item 3</div>
<ol class="dd-list">
<li class="dd-item" data-id="4">
<div...
CSS
.cf:after {
visibility: hidden;
display: block;
font-size: 0;
content:" ";
clear: both;
height: 0;
}
#dd {
max-height: 346px;
overflow-y: auto;
overflow-x: hidden;}
* html .cf {
zoom: 1;
}
*:first-child+html .cf {
zoom: 1;
}
html {
margin: 0;
padding: 0;
}
body {
font-size: 100%;
margin: 0;
padding: 1.75em;
font-family:'Helvetica Neue', Arial, sans-serif;
}
h1 {
font-size: 1.75em;
margin: 0 0 0.6em 0;
}
a {
color: #2996cc;
}
a:hover {
text-decoration: none;
}
p {
line-height: 1.5em;
}
.small {
color: #666;
font-size: 0.875em;
}
.large {
font-size: 1.25em;
}
/**
* Nestable
*/
.dd {
position: relative;
display: block;
margin: 0;
padding: 0;
max-width: 600px;
list-style: none;
font-size: 13px;
line-height: 20px;
}
.dd-list {
display: block;
position: relative;
margin: 0;
padding: 0;
list-style: none;
}
.dd-list .dd-list {
padding-left: 30px;
}
.dd-collapsed .dd-list {
display: none;
}
.dd-item, .dd-empty, .dd-placeholder {
display: block;
position: relative;
margin: 0;
padding: 0;
min-height: 20px;
font-size: 13px;
line-height: 20px;
}
.dd-handle {
display: block;
height: 30px;
margin: 5px 0;
padding: 5px 10px;
color: #333;
text-decoration: none;
font-weight: bold;
border: 1px solid #ccc;
background: #fafafa;
background: -webkit-linear-gradient(top, #fafafa 0%, #eee 100%);
background: -moz-linear-gradient(top, #fafafa 0%, #eee 100%);
background: linear-gradient(top, #fafafa 0%, #eee 100%);
-webkit-border-radius: 3px;
border-radius: 3px;
box-sizing: border-box;
-moz-box-sizing: border-box;
}
.dd-handle:hover {
color: #2ea8e5;
background: #fff;
}
.dd-item > button {
display: block;
position: relative;
cursor: pointer;
float: left;
width: 25px;
height: 20px;
margin: 5px 0;
...
JavaScript
$('.dd').nestable({ /* config options */ });
var scroll = autoScroll(['#dd'], {
margin: 20,
maxSpeed: 20,
scrollWhenOutside: true,
autoScroll: function(){
// TODO: Only scroll when the pointer is down AND there is a child being dragged.
return this.down;
}
});