没搞明白代码的意思
代码如下
oDrag.addEventListener('mousedown',function(e){
//鼠标事件1 - 在标题栏按下(要计算鼠标相对拖拽元素的左上角的坐标 ,并且标记元素为可拖动)
isDraging = true;
startX = e.pageX - this.offsetLeft;
startY = e.pageY - this.offsetTop;
})
这里的e.pageX- this.offsetLeft; 鼠标的坐标-获取对象的左侧到屏幕的距离,startX不就是获取的偏移值吗?
为什么后面还要写上 var moveX = e.pageX - startX;
var moveY = e.pageY - startY;
直接写xxx.style.left=startX不行吗?
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>拖拽实现</title>
<style type="text/css">
#draggable{ width: 100px;height: 100px; position: absolute;top: 100px;left: 100px;border: 1px solid #ccc;background: #eee;padding: 10px;cursor: move;}
</style>
</head>
<body>
<div id="draggable">拖我</div>
<script type="text/javascript">
var oDrag = document.getElementById('draggable');
var isDraging = false;
var startX = 0;
var startY = 0;
oDrag.addEventListener('mousedown',function(e){
//鼠标事件1 - 在标题栏按下(要计算鼠标相对拖拽元素的左上角的坐标 ,并且标记元素为可拖动)
isDraging = true;
startX = e.pageX - this.offsetLeft;
startY = e.pageY - this.offsetTop;
})
document.onmouseup = function(e){
//鼠标事件3 - 鼠标松开的时候(标记元素为不可拖动)
isDraging = false;
}
document.onmousemove = function(e) {
//鼠标事件2 - 鼠标移动时(要检测,元素是否标记为移动)
var moveX = e.pageX - startX;
var moveY = e.pageY - startY;
var pageX = document.documentElement.clientWidth - oDrag.offsetWidth;
var pageY = document.documentElement.clientHeight - oDrag.offsetHeight;
moveX = Math.min(pageX, Math.max(0, moveX));
moveY = Math.min(pageY, Math.max(0, moveY));
if (isDraging) {
oDrag.style.left = moveX + 'px';
oDrag.style.top = moveY + 'px';
}
};
</script>
</body>
</html>
那两个是
鼠标相对拖拽元素的左上角的坐标
,不是鼠标相对界面移动的坐标
主要是考虑到了鼠标不能将元素拖出出界面之外才这样写的