jQuery 3 breaks drag&drop
Using jQuery 3+ library breaks drag&drop if the draggable element's dimensions are not integer pixel values.
HTML
<script src="https://code.jquery.com/jquery-3.2.1.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<!-- How to reproduce the bug:
1) Drag the white boxes onto the drop targets => they'll bounce back (the bug)
2) In the CSS, remove the subpixels in line 35 and 36 => it works
Use different values of subpixels to get different failures (none work, just one works etc.)
-->
<div class="draggableContainer" id="screen-responsible2">
<div class="drag-source">
<div class="droppable">
<p> </p>
</div>
<div class="droppable">
<p> </p>
</div>
<div class="draggable">
<p>One</p>
</div>
<div class="draggable">
<p>Two</p>
</div>
</div>
<div class="drag-target">
<div class="droppable">
<p>Drop me here</p>
</div>
<div class="droppable">
<p>Drop me here</p>
</div>
</div>
</div>
CSS
* {
box-sizing: border-box;
}
html {
width: 100%;
height: 100%;
}
body {
width: 100%;
height: 100%;
font: 1em/1.42857143 Arial, Helvetica, Verdana, Geneva, sans-serif;
}
.draggableContainer {
position: relative;
}
.drag-source,
.drag-target {
width: 100%;
height: 6.25rem;
padding: 0.625rem;
background:#ccc;
}
.drag-target {
margin: 1.875rem 0;
}
.droppable,
.draggable {
position: absolute;
left: 0.625rem;
padding: 5px;
margin: 0 0.625rem 0.625rem 0;
font-size: .9rem;
background: #fff;
height: 52.2px; /* try 2, 5 and 7 as first digit after comma */
width: 90.2px;
}
div.draggable + div.draggable,
div.droppable + div.droppable {
left: 6.875rem;
}
div.draggable + div.draggable + div.draggable,
div.droppable + div.droppable + div.droppable {
left: 13.125rem;
}
.ui-draggable-handle:hover {
cursor: move;
}
.draggable {
z-index: 1;
}
.droppable {
background: #999;
}
.draggable p,
.droppable p {
margin: 0;
}
.ui-draggable-dragging {
z-index: 100;
}
JavaScript
$( function() {
$( ".draggable" ).draggable({
containment: "body .draggableContainer",
snap: "body .draggableContainer .droppable",
revert: "invalid",
snapTolerance: 15,
snapMode: "inner"
});
$("body .drag-source").droppable({
accept: "body .drag-source .draggable",
revert: "invalid"
});
$("body .drag-target .droppable").droppable({
accept: "body .drag-source .draggable",
tolerance: "fit"
});
} );