十、拖拽模型

十、拖拽模型

1
2
3
4
5
6
7
8
9
#box {
width: 100px;
height: 100px;
background-color: red;
/* 因为是要拖拽,改变的是元素的定位值,所以要绝对定位 */
position: absolute;
left: 0;
top: 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 获取元素
var box = document.getElementById("box");

// 要求:当鼠标按下box的时候并移动鼠标,元素要跟随鼠标移动
// 给box添加mousedown事件
box.onmousedown = function(e){
// 获取鼠标位于视口中的位置
var x = e.clientX;
var y = e.clientY;

// 获取box的定位值 计算后的样式 用于防止第二次点击时,box返回原位置
var left = parseInt(getComputedStyle(box)["left"]);
var top = parseInt(getComputedStyle(box)["top"]);
console.log(left, top);

// 给box添加mousemove事件 在document范围内 否则鼠标快速滑动是超出box范围 运动停止
document.onmousemove = function(e){
// 获取鼠标移动后的位置
var m_x = e.clientX;
var m_y = e.clientY;

// 改变box的定位值 用鼠标移动后的距离 - 鼠标移动之前的距离 + 鼠标当前位置
box.style.left = m_x - x + left + "px";
box.style.top = m_y - y + top + "px";
}
}

// 当鼠标抬起,不让box再跟随鼠标移动了
document.onmouseup = function(){
// 取消mousemove事件
document.onmousemove = null;
}
点击查看

本文标题:十、拖拽模型

文章作者:Mango

发布时间:2020年07月13日 - 22:26:51

最后更新:2020年07月14日 - 13:27:10

原始链接:https://mango185.github.io/post/5b3469a.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------