I'm using Jquery-Sortable plugin as in here to build my menu project drap & drop just wordpress menubuilder.
Container height containing all menu items is fixed so that as the number of menu items exceed the container height, it is hard to drag the top item one to the bottom of container.
$(function() {
$("ol.default").sortable({
group: 'item'
});
})
body.dragging,
body.dragging * {
cursor: move !important;
}
.overflow {
height: 200px;
overflow-x: hidden;
overflow-y: auto;
margin-top: 20px;
}
.dragged {
position: absolute;
top: 0;
opacity: 0.5;
z-index: 2000;
}
/* line 10, jquery-sortable.css.sass */
ol.vertical {
margin: 0 0 9px 0;
}
/* line 12, jquery-sortable.css.sass */
ol.vertical li {
display: block;
margin: 5px;
padding: 5px;
border: 1px solid #cccccc;
color: #0088cc;
background: #eeeeee;
}
ol.vertical li.placeholder {
position: relative;
margin: 0;
padding: 0;
border: none;
}
ol.vertical li.placeholder:before {
position: absolute;
content: "";
width: 0;
height: 0;
margin-top: -5px;
left: -5px;
top: -4px;
border: 5px solid transparent;
border-left-color: red;
border-right: none;
}
ol {
list-style-type: none;
}
ol i.icon-move {
cursor: pointer;
}
ol li.highlight {
background: #333333;
color: #999999;
}
ol li.highlight i.icon-move {
background-image: url("../img/glyphicons-halflings-white.png");
}
ol.nested_with_switch,
ol.nested_with_switch ol {
border: 1px solid #eeeeee;
}
ol.nested_with_switch.active,
ol.nested_with_switch ol.active {
border: 1px solid #333333;
}
ol.nested_with_switch li,
ol.simple_with_animation li,
ol.default li {
cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://johnny.github.io/jquery-sortable/js/jquery-sortable-min.js"></script>
<div class="overflow">
<ol class="default vertical">
<li>elem1</li>
<li>elem2</li>
<li>elem3</li>
<li>elem4</li>
<li>elem5</li>
<li>elem6</li>
<li>elem7</li>
<li>elem8</li>
<li>elem9</li>
<li>elem10</li>
</ol>
</div>
<div class="overflow">
<ol class="default vertical">
<li>elem1</li>
<li>elem2</li>
<li>elem3</li>
<li>elem4</li>
<li>elem5</li>
<li>elem6</li>
<li>elem7</li>
<li>elem8</li>
<li>elem9</li>
<li>elem10</li>
</ol>
</div>
I tried to search around for auto scroll solution but seem there was not much mentioned about this issue, while plugin github mentioned this issue but seemed it did not work for my case.
How could I fixed this? Please kindly help. Thanks
You need to use correct version of jQuery UI, try the snippet below
$("ol.default").sortable({
onDrag: (item, position, sup, event) => {
const container = $(item).parents('.overflow');
const containerTop = container.offset().top;
const containerBottom = containerTop + container.height();
if (event.pageY > containerBottom) {
container.scrollTop(container.scrollTop() + 10);
} else if (event.pageY < containerTop) {
container.scrollTop(container.scrollTop() - 10);
}
}
})
body.dragging,
body.dragging * {
cursor: move !important;
}
.overflow {
height: 200px;
overflow-x: hidden;
overflow-y: auto;
margin-top: 20px;
}
.dragged {
position: absolute;
top: 0;
opacity: 0.5;
z-index: 2000;
}
/* line 10, jquery-sortable.css.sass */
ol.vertical {
margin: 0 0 9px 0;
}
/* line 12, jquery-sortable.css.sass */
ol.vertical li {
display: block;
margin: 5px;
padding: 5px;
border: 1px solid #cccccc;
color: #0088cc;
background: #eeeeee;
}
ol.vertical li.placeholder {
position: relative;
margin: 0;
padding: 0;
border: none;
}
ol.vertical li.placeholder:before {
position: absolute;
content: "";
width: 0;
height: 0;
margin-top: -5px;
left: -5px;
top: -4px;
border: 5px solid transparent;
border-left-color: red;
border-right: none;
}
ol {
list-style-type: none;
}
ol i.icon-move {
cursor: pointer;
}
ol li.highlight {
background: #333333;
color: #999999;
}
ol li.highlight i.icon-move {
background-image: url("../img/glyphicons-halflings-white.png");
}
ol.nested_with_switch,
ol.nested_with_switch ol {
border: 1px solid #eeeeee;
}
ol.nested_with_switch.active,
ol.nested_with_switch ol.active {
border: 1px solid #333333;
}
ol.nested_with_switch li,
ol.simple_with_animation li,
ol.default li {
cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://johnny.github.io/jquery-sortable/js/jquery-sortable-min.js"></script>
<div class="overflow">
<ol class="default vertical">
<li>elem1</li>
<li>elem2</li>
<li>elem3</li>
<li>elem4</li>
<li>elem5</li>
<li>elem6</li>
<li>elem7</li>
<li>elem8</li>
<li>elem9</li>
<li>elem10</li>
</ol>
</div>
<div class="overflow">
<ol class="default vertical">
<li>elem1</li>
<li>elem2</li>
<li>elem3</li>
<li>elem4</li>
<li>elem5</li>
<li>elem6</li>
<li>elem7</li>
<li>elem8</li>
<li>elem9</li>
<li>elem10</li>
</ol>
</div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With