js實現簡單拖拽案例
阿新 • • 發佈:2018-12-19
簡單拖拽事件主要是監聽三個事件:onmousedown, onmousemove, onmouseup 三個事件,思路也很簡單,但是寫的時候還是遇到了一些小問題,先放程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>拖拽事件案例</title>
<style type="text/css">
*{
margin: 0;
padding : 0;
box-sizing: border-box;
}
#div{
width: 100px;
height: 100px;
position: relative;
left: 0;
top: 0;
background: #00a9e2;
font-size: 28px;
color: #fff;
text-align: center;
line-height : 100px;
}
</style>
</head>
<body>
<div id="div">
拖拽
</div>
</body>
<script>
var div = document.getElementById('div');
div.onmousedown = function (e) {
var startX = div.offsetLeft;
var startY = div.offsetTop;
var downX = e.clientX;
var downY = e.clientY;
document.onmousemove = function (e) {
var moveX = e.clientX;
var moveY = e.clientY;
div.style.left = (startX + moveX - downX) + 'px';
div.style.top = (startY + moveY - downY) + 'px';
};
document.onmouseup = function () {
document.onmousemove = null;
document.onmouseup = null;
}
};
</script>
</html>
說一下遇到的小問題:
1,開始沒有獲取startX,startY, 當第一次拖拽時正常,但是第二次就有問題了,點選後直接返回初始位置了,所以我們每次onmousedown時應該先獲取startX,startY,在賦值拖拽位置時要加上
2,document.onmouseup寫在了onmousedown函式的外面了,只能觸發一次,第二次點選時,元素便不能停止拖拽了
3,注意offsetLeft,offsetTop是獲取元素相對於元素最近有定位的父元素的left,top ,沒有定位的父元素,則是獲取相對於body的
4,clientX(Y) 事件屬性返回當事件被觸發時滑鼠指標向對於瀏覽器頁面(或客戶區)的水平座標(垂直座標)