當前位置:名人名言大全網 - 祝福短信 - 如何用js實現拖放功能

如何用js實現拖放功能

這次給大家帶來的是如何用js實現拖拽功能。用js實現拖拽功能有哪些註意事項?下面是壹個實際案例。讓我們來看看。

如果要設置對象拖動,必須使用三個事件,並且這三個事件的使用順序不能顛倒。

1.onmousedown:鼠標按下事件

2.onmousemove:鼠標移動事件

3.onmouseup:鼠標擡起事件

拖動的基本原理是根據鼠標的移動來移動被拖動的元素。鼠標的移動也是x、y坐標的變化;元素的移動就是style.position的上下左右的變化,當然不是要隨時移動鼠標,而是判斷鼠標左鍵是否按下,是否按在壹個可拖動的元素上。

基本想法如下:

當鼠標按在元素{

拖動狀態= 1

記錄鼠標的x和y坐標。

記錄元素的x和y坐標。

}

當鼠標移動到元素上時{

如果拖動狀態為0,什麽都不做。

如果拖動狀態為1,則

元素y =當前鼠標y-原始鼠標y+原始元素y

元素x =當前鼠標x-原始鼠標x+原始元素x

}

每當釋放鼠標時{

拖動狀態= 0

}部分示例代碼:

HTML部分

& ltp class="calculator" id="drag " >* * * * * * * * * & lt/p & gt;CSS部分

計算器{

位置:絕對;/*設置絕對定位,脫離文檔流,方便拖拽*/

顯示:塊;

寬度:218px;

高度:280px

光標:移動;/*鼠標被拖動*/

}JS部分

window.onload = function() {

//拖動功能(主要觸發三個事件:onmousedown \ onmousemove \ onmouseup)

var drag = document . getelementbyid(' drag ');

//當點擊壹個對象時,使用拖動對象即可。move和up是全局區域,即整個文檔是通用的。應該使用document對象而不是drag對象(否則,使用drag對象時對象只能向右或向下移動)。

drag.onmousedown = function(e) {

var e = e | | window.event//兼容ie瀏覽器

var diffX = e . clientx-drag . offset left;//鼠標點擊的瞬間距離對象左邊界的距離=點擊時的位置到瀏覽器最左上角的距離-對象左邊界到瀏覽器最左上角的距離。

var diffY = e . clienty-drag . offsettop;

/*較低版本的ie bug:當壹個對象被拖出瀏覽器但在窗口之外時,會出現滾動條。

解決方法是采用ie瀏覽器特有的兩種方法,setcapture () \ releasedcapture(),

妳可以在瀏覽器外滑動鼠標,捕捉事件,我們的bug是當鼠標移出瀏覽器時,

超過限制的功能將無效。這個問題可以用這個方法解決。註意:這兩個方法在onmousedown和onmouseup */中使用

if(typeof drag.setCapture!= '未定義'){

drag . set capture();

}

document . onmousemove = function(e){

var e = e | | window.event//兼容ie瀏覽器

var left = e . clientx-diffX;

var top=e.clientY-diffY。

//只在瀏覽器窗口內控制拖動對象的範圍,不允許滾動條。

if(left & lt;0){

左= 0;

} else if(left & gt;window . inner width-drag . offsetwidth){

left = window . inner width-drag . offsetwidth;

}

if(top & lt;0){

top = 0;

} else if(top & gt;window . inner height-drag . offset height){

top = window . inner height-drag . offset height;

}

//再次獲取物體移動時的距離,解決拖動時晃動的現象。

drag . style . left = left+' px ';

drag . style . top = top+' px ';

};

文檔。onmouseup = function(e){//鼠標彈起時,停止移動。

this.onmousemove = null

this.onmouseup = null//防止鼠標彈跳後循環(也就是防止鼠標放上去的時候不動)

//修復較低版本的ie bug

if(typeof drag.releaseCapture!= '未定義'){

drag . release capture();

}

};

};

};相信看完這個案例,妳已經掌握了方法。更多精彩請關註Gxl上其他相關文章!

推薦閱讀:

Vue做短信驗證碼註冊功能。

如何使用Angular將組件聯機