javascript 原生實(shí)現(xiàn)拖拽

在javascript中,我們可以通過事件event對象來獲取一些屬性和方法。其中clinetX和clientY這兩個(gè)屬性可以拿到鼠標(biāo)相對于窗口的坐標(biāo)位置,并且是無單位的數(shù)。

在了解了需要的信息下,我們開始今天的主題——拖拽

需要了解事件: onmousedown、onmouseup、onmousemove

需要了解事件對象屬性:clientX、clientY、offsetLeft、offsetTop

下面是實(shí)現(xiàn)代碼

<div></div> // html

css部分

div{

? ? width: 150px;

????height: 150px;

? ? background: red;

? ? position: absolute; // 必須定義

? ? top: 0;

? ? left: 0;

}

js部分? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

// 首先找到我們要拖拽的元素

oDiv = document.getElementsByTagName('div')[0];

// 監(jiān)聽鼠標(biāo)按下事件

oDiv.onmousedown = function(event){

? ? var event = event || window.event //兼容低版本IE

? ? // 鼠標(biāo)按下的時(shí)候記錄鼠標(biāo)在盒子中的位置

? ? var deltaX = event.clientX - oDiv.offsetLeft; // 相對于X軸的偏移量

? ? var deltaY = event.clientY - oDiv.offsetTop; // 相對于Y軸的偏移量

? ? // 給整個(gè)document添加mousemove事件,鼠標(biāo)移動(dòng)時(shí)觸發(fā)

? ? document.onmousemove = function(event2) {? // 為了區(qū)別開上下文event事件對象 定義為event2

????????oDiv.style.left = event2.clientX - deltaX + 'px';

? ??????oDiv.style.top = event2.clientY - deltaY + 'px';

????}????

}

// 監(jiān)聽鼠標(biāo)抬起事件

document.onmouseup = function() {

? ? document.onmousedown = null; // 刪除了監(jiān)聽

}

上面這段代碼就是拖拽的實(shí)現(xiàn)邏輯,偏移量的計(jì)算是為了讓div在鼠標(biāo)移動(dòng)過程中只運(yùn)算div相對于窗口的移動(dòng)距離,而不是鼠標(biāo)。

有什么不足之處,請各位大大指點(diǎn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容