- 定义拖放元素为绝对定位,以及设计事件的响应过程
- 清楚几个左边概念:按下鼠标时的指针坐标,移动中当前鼠标的指针坐标,松开鼠标时的指针坐标,拖放元素的原始坐标,拖动中的元素坐标
- 算法设计:按下鼠标时,获取被拖放元素和鼠标指针的位置,在移动中实现计算鼠标偏移的距离,并利用该偏移距离加上被拖放元素的原坐标位置,获得拖放元素的实时坐标
<div id="box"></div>
<script type="text/javascript">
var box = document.getElementById("box");
box.style.position = "absolute";
box.style.width = "160px";
box.style.height = "120px";
box.style.backgroundColor = "red";
var mx, my, ox, oy;
function e(e) {
if (!e) {
e = window.event
e.target = e.srcElement
e.layerX = e.offsetX
e.layerY = e.offsetY
}
e.mx = e.pageX || e.clientX + document.body.scrollLeft
e.my = e.pageY || e.clientY + document.body.scrollTop
return e
}
document.onmousedown = function(event) {
event = e(event)
o = event.target
ox = parseInt(o.offsetLeft)
ox = parseInt(o.offsetTop)
mx = event.mx
my = event.my
document.onmousemove = move
document.onmouseup = stop
}
function move(event) {
event = e(event)
o.style.left = ox + event.mx - mx + "px"
o.style.top = oy + event.my - my + "px"
}
function stop(event) {
event = e(event)
ox = parseInt(o.offsetLeft)
oy = parseInt(o.offsetTop)
mx = event.mx
my = event.my
o = document.onmousemove = document.onmouseup = null;
}
</script>