1. 程式人生 > >js實現簡單拖拽案例

js實現簡單拖拽案例

簡單拖拽事件主要是監聽三個事件: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) 事件屬性返回當事件被觸發時滑鼠指標向對於瀏覽器頁面(或客戶區)的水平座標(垂直座標)