JSFiddle - React, Tailwind, and code Playground
HTML
<div style="position: relative; width: 500px; height: 500px; background-color: Red;">
<div id="d" style="position: absolute; width: 100px; left: 0px; height: 100px; top: 0px; cursor: move; border: 1px solid black;" unselectable>a</div>
</div>
CSS
#d{
-moz-user-select: -moz-none;
-khtml-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
JavaScript
var x = 0;
var y = 0;
$("#d").live("mousedown", function () {
var element = $(this);
var parent = element.parent();
$(document).mousemove(function (e) {
var x_movement = 0;
var y_movement = 0;
if (x == e.pageX || x == 0) {
x = e.pageX;
} else {
x_movement = e.pageX - x;
x = e.pageX;
}
if (y == e.pageY || y == 0) {
y = e.pageY;
} else {
y_movement = e.pageY - y;
y = e.pageY;
}
var left = parseFloat(element.css("left")) + x_movement;
// hold inside left
if (left <= 0) left = 0;
// hold inside right
var max_right = (parseFloat(element.outerWidth()) - parent.width()) * -1;
if (left >= max_right) left = max_right;
element.css("left", left);
var top = parseFloat(element.css("top")) + y_movement;
// hold inside top
if (top <= 0) top = 0;
// hold inside bottom
var max_bottom = (parseFloat(element.outerHeight()) - parent.height()) * -1;
if (top >= max_bottom) top = max_bottom;
element.css("top", top);
return false;
});
});
$(document).mouseup(function () {
x = 0;
y = 0;
$(document).unbind("mousemove");
});