Draggable Without JQuery UI
HTML
<div class="rel">
<div class="draggable"></div>
<div class="draggable">
<div class="nope">Not draggable<br/>area.
<div class="draggable lvl2">Draggable<br/> again</div>
</div>
</div>
<div class="draggable"></div>
<div class="draggable"></div>
<div class="draggable"></div>
</div>
CSS
body {
padding:50px;
}
.rel {
/* correctly works in relative container */
position: relative;
background-color: #eee;
margin: 4em 0 0 2em;
height: 88px;
}
.rel>div.draggable {
cursor:move;
min-width:80px;
min-height:80px;
border-radius:5px;
background-color:#00A2E8;
border:1px dashed black;
margin:3px;
float:left;
}
.lvl2 {
cursor:move;
min-width:60px;
min-height:60px;
border-radius:5px;
background-color:#e22;
border:1px dashed black;
margin:3px;
float:left;
}
.nope {
margin: 1em;
padding: 5px;
background: green;
font-weight: bold;
text-align: center;
}
div.dragged {
background-color:yellow !important;
}
JavaScript
$(function () {
$('body').on('mousedown', '.draggable', function (e) {
if ($(this)[0] === $(e.target)[0]) { // not for inner elements
var offset = $(this).offset();
var grabX = e.pageX - offset.left;
var grabY = e.pageY - offset.top;
$(this).addClass('dragged').parents().on('mousemove', function (e) {
$('.dragged').offset({
top: e.pageY - grabY,
left: e.pageX - grabX
}).on('mouseup', function () {
$(this).removeClass('dragged');
});
});
e.preventDefault();
//e.stopPropagation();
}
}).on('mouseup', '.dragged', function () {
$(this).removeClass('dragged');
});
});