JSFiddle - React, Tailwind, and code Playground
HTML
<div id="scene">
<div class="object">
</div>
</div>
CSS
#scene {
position: absolute;
left: 50%;
top: 50%;
width: 200px;
height: 200px;
margin: -100px 0 0 -100px;
background-color: #eee;
box-shadow:inset 0 0 .8em #666;
overflow:hidden;
border:1px solid #999;
border-radius: 5px;
}
.object {
position: absolute;
left: 50px;
top: 50px;
width: 50px;
height: 50px;
background-color: #eee;
box-shadow:0 0 .5em #444;
cursor: default;
text-align: center;
border-radius: 5px;
}
span {
font-size: 9px;
color: #444;
}
JavaScript
jQuery(document).ready(function(){
var scene = $('#scene');
var object = $('.object');
scene.mousemove(function(e){
// get offset of object relative to scene
var offsetX = e.pageX - scene.offset().left;
var offsetY = e.pageY - scene.offset().top;
// grab object in it's center (optional)
offsetX -= object.width() / 2;
offsetY -= object.height() / 2;
// don't left to object out of the scene
var maxX = scene.width() - object.width();
var maxY = scene.height() - object.height();
if(0 > offsetX) offsetX = 0;
else if(offsetX > maxX) offsetX = maxX ;
if(0 > offsetY) offsetY = 0;
else if(offsetY > maxY) offsetY = maxY;
// delete decimals
offsetX = Math.floor(offsetX);
offsetY = Math.floor(offsetY);
// debug information
object.html('<span>X: ' + offsetX + ' Y: ' + offsetY + '</span>');
// move object
object.css('left', offsetX).css('top', offsetY);
});
});