// 1 父框没有定位
<style>
#box {
width: 50px;
height: 50px;
background-color: #e74c3c;
position: absolute;
}
#plus_box {
width: 300px;
height: 300px;
border: 1px solid red;
margin: 100px auto;
}
</style>
</head>
<body>
<!-- 定义一个盒子 -->
<div id="plus_box">
<div id="box"></div>
</div>
<script>
/* 获取box的节点元素 */
var box = document.getElementById('box')
/* 获取父盒子 */
var plus_box = document.getElementById('plus_box');
/* 定义一个变量 */
var flag = false;
/* 定义两个值,保存鼠标按下时初始值 */
var p_left = 0,
p_top = 0;
/* 绑定鼠标按下 */
box.onmousedown = function(e) {
flag = true
/* 定义两个值,保存鼠标按下时位置 */
p_left = e.offsetX;
p_top = e.offsetY;
}
/* 鼠标抬起 */
document.onmouseup = function() {
flag = false
}
var pl = plus_box.offsetLeft
var pt = plus_box.offsetTop
/* 鼠标移动 */
document.onmousemove = function(e) {
if (!flag) {
return;
}
/* 求坐标点 */
var x = e.pageX - p_left;
var y = e.pageY - p_top;
/* 超出时的 */
if (x < pl) {
/* x的值为 */
x = pl
}
if (y < pt) {
y = pt
}
/* 求left最大值 */
var maxLeft = pl + (plus_box.offsetWidth - box.offsetWidth);
var maxTop = pt + (plus_box.offsetHeight - box.offsetHeight);
if (x > maxLeft) {
x = maxLeft
}
if (y > maxTop) {
y = maxTop
}
/* 将坐标赋值给盒子 */
box.style.left = x + 'px';
box.style.top = y + 'px';
}
</script>
</body>
//2 父框定位
<style>
#box {
width: 50px;
height: 50px;
background-color: #e74c3c;
position: absolute;
}
#plus_box {
width: 300px;
height: 300px;
border: 1px solid red;
position: relative;
margin: 100px auto;
}
</style>
</head>
<body>
<!-- 定义一个盒子 -->
<div id="plus_box">
<div id="box"></div>
</div>
<script>
/* 获取box的节点元素 */
var box = document.getElementById('box')
/* 获取父盒子 */
var plus_box = document.getElementById('plus_box');
/* 定义一个变量 */
var flag = false;
/* 定义两个值,保存鼠标按下时初始值 */
var p_left = 0,
p_top = 0;
/* 绑定鼠标按下 */
box.onmousedown = function(e) {
flag = true
/* 定义两个值,保存鼠标按下时位置 */
p_left = e.offsetX;
p_top = e.offsetY;
}
/* 鼠标抬起 */
document.onmouseup = function() {
flag = false
}
var pl = plus_box.offsetLeft
var pt = plus_box.offsetTop
/* 鼠标移动 */
document.onmousemove = function(e) {
if (!flag) {
return;
}
/* 求坐标点 */
var x = e.pageX - p_left - plus_box.offsetLeft;
var y = e.pageY - p_top - plus_box.offsetTop;
/* 超出时的 */
if (x < 0) {
/* x的值为 */
x = 0
}
if (y < 0) {
y = 0
}
/* 求left最大值 */
var maxLeft = plus_box.offsetWidth - box.offsetWidth;
var maxTop = plus_box.offsetHeight - box.offsetHeight;
if (x > maxLeft) {
x = maxLeft
}
if (y > maxTop) {
y = maxTop
}
/* 将坐标赋值给盒子 */
box.style.left = x + 'px';
box.style.top = y + 'px';
}
</script>
</body>
//3 优化后的写法
<style>
* {
margin: 0;
padding: 0;
}
#box {
width: 100px;
height: 100px;
background-color: #e74c3c;
position: absolute;
}
#big-box {
width: 600px;
height: 600px;
border: 1px solid slateblue;
margin: 100px auto;
position: relative;
}
</style>
</head>
<body>
<div id="big-box">
<div id="box"></div>
</div>
<!--
父盒子定位
-->
<script>
//获取box元素节点
var box = document.getElementById('box');
//获取大盒子
var bigBox = document.getElementById('big-box');
//定义一个变量,用于控制盒子是否可以移动。默认值为false,不可以动。
var flag = false;
//定义两个值,用于保存 鼠标按下时,鼠标距离盒子边框的偏移量。
var b_left = 0,
b_top = 0;
//绑定鼠标按下
box.onmousedown = function(e) {
flag = true;
b_left = e.offsetX;
b_top = e.offsetY;
//绑定鼠标移动事件
document.onmousemove = function(e) {
//求当前盒子的left和top值 e.pageX - e.offsetX
//求坐标点
var x = e.pageX - b_left - bigBox.offsetLeft;
var y = e.pageY - b_top - bigBox.offsetTop;
//left的最大值 : 大盒子宽-小盒子宽
var maxLeft = bigBox.offsetWidth - box.offsetWidth;
//top的最大值 大盒子高-小盒子高
var maxTop = bigBox.offsetHeight - box.offsetHeight;
//移动之前判断是否超出边界
if (x < 0) {
x = 0;
} else if (x > maxLeft) {
x = maxLeft
}
if (y < 0) {
y = 0;
} else if (y > maxTop) {
y = maxTop;
}
//将坐标赋值给盒子
box.style.left = x + "px";
box.style.top = y + "px";
}
}
//绑定鼠标抬起
document.onmouseup = function() {
document.onmousemove = null;
}
</script>
</body>