**1、index.html
javascript
<div id="wrap">
<div class="box"></div>
<div class="box"></div>
</div>
2、app.js
javascript
let MOVE_DOM_CLASS = "box";
let wrap = document.querySelector("#wrap");
let w_left = getWrapPositon("offsetLeft");
let w_right = getWrapPositon("right");
let w_top = getWrapPositon("offsetTop");
let w_bottom = getWrapPositon("bottom");
// 获取外层的边框位置
function getWrapPositon(ps) {
switch (ps) {
case "offsetLeft":
return wrap[ps];
break;
case "offsetTop":
return wrap[ps];
break;
case "right":
return wrap.clientWidth;
break;
case "bottom":
return wrap.clientHeight;
break;
default:
break;
}
}
document.onmousedown = function (e) {
mousedownEvent(e);
};
document.onmouseup = function (e) {
mouseupEvent(e);
};
// 按下鼠标
function mousedownEvent(d_ev) {
setDomStyle(d_ev, "add");
document.onmousemove = function (m_ev) {
setDomPostion(m_ev, d_ev);
};
}
// 松开鼠标
function mouseupEvent(e) {
setDomStyle(e, "remove");
document.onmousemove = null;
}
// 处理 dom 样式
function setDomStyle(e, type) {
let box = getTarget(e);
box && box.classList[type]("box_bg");
}
// 设置 dom 位置
function setDomPostion(m_ev, d_ev) {
const { x, y } = getPostion(m_ev, d_ev);
let box = getTarget(d_ev);
if (box) {
box.style.left = x + "px";
box.style.top = y + "px";
}
}
// 获取元素位置
function getPostion(m_ev, d_ev) {
const { clientX, clientY } = m_ev;
const { offsetX, offsetY } = d_ev;
let x = clientX - offsetX;
let y = clientY - offsetY;
return { x, y };
}
// 获取目标元素
function getTarget(e) {
let target = e.target;
if (target.className.includes(MOVE_DOM_CLASS)) return target;
return "";
}
// 是否在可视区域
function inVisibleArea(x, y) {
console.log("X轴", w_left, x, w_right, w_left < x && x < w_right);
console.log("Y轴", w_top, y, w_bottom, w_top < y && y < w_bottom);
return w_left < x && x < w_right && w_top < y && y < w_bottom;
}
**