blob: 817421cab1e19d75de465a184016c386608cfcd5 [file] [log] [blame]
<!doctype html>
<style>
body {
margin: 0;
padding: 0;
}
div {
position: absolute;
width: 50px;
height: 50px;
left: 0;
top: 0;
}
#TR {
left: 206px;
}
#BL {
top: 206px;
}
#BR {
left: 206px;
top: 206px;
}
#container {
width: 256px;
height: 256px;
left: 0;
top: 0;
border: 1px solid black;
}
#slide {
background: silver;
z-index: 1;
}
</style>
<body>
<div id="container">
<div id="slide"></div>
<div id="TR"></div>
<div id="BR"></div>
<div id="BL"></div>
</div>
<script>
let offset
let mouseDown = false
let slide = document.getElementById('slide')
slide.addEventListener('mousedown', function (e) {
mouseDown = true
let bbox = slide.getBoundingClientRect()
offset = {
x: e.clientX - bbox.left,
y: e.clientY - bbox.top,
}
})
let container = document.getElementById('container')
let slideBox = slide.getBoundingClientRect()
let containerBox = container.getBoundingClientRect()
let maxLeft = containerBox.width - slideBox.width - 2
let maxTop = containerBox.height - slideBox.height - 2
container.addEventListener('mousemove', function (e) {
if (!mouseDown) return
let bbox = slide.getBoundingClientRect()
let newLeft = e.clientX - offset.x
newLeft = Math.max(newLeft, 0)
newLeft = Math.min(newLeft, maxLeft)
let newTop = e.clientY - offset.y
newTop = Math.max(newTop, 0)
newTop = Math.min(newTop, maxTop)
slide.style.top = `${newTop}px`
slide.style.left = `${newLeft}px`
})
document.body.addEventListener('mouseup', function () {
mouseDown = false
})
</script>
</body>