javascript實現拖拽的原理

1.拖拽的基本原理:當mousedown時,記下鼠標單擊位置離拖拽容器左邊沿的距離和上邊沿的距離,即tmpX/tmpY;當mousemove時,通過定位拖拽容器的style.left/style.top,使拖拽容器進行移動,定位到哪裏則由剛剛的tmpX/tmpY和當前鼠標所在的位置計算得出;當mouseup時,結束移動。

2.“var dragObj=this;”這句是爲了在mousedown/mouseup/mousemove事件裏對Drag對象的相關變量進行引用。因爲在mousedown裏的this是titleBar,而mouseup/mousemove裏的this是document。

3.當拖拽速度太快導致鼠標移出拖拽容器,而拖拽容器位置未變時,用document.mousemove代替titleBar.mousemove即可。

4.設置拖拽容器可拖拽的範圍,若未設置,則默認爲當前窗口可視範圍。在設置範圍時使用Math.max/min來處理,而不是用if語句判斷,用後者的話會導致快速拖拽時未達到容許範圍邊沿即停止的狀況。

5.在拖拽過程中,可設置是否保留原來拖拽容器,當拖拽結束時,隱藏原來容器,默認不保留。

6.當拖拽時,可設置拖拽的容器是否透明及透明度是多少,默認爲不透明。但若拖拽過程中設置保留原來拖拽容器,即keepOrigin:true,則設置透明度爲50%。

7.單擊鼠標右鍵、鼠標中鍵等不能拖動,僅單擊鼠標左鍵可以拖動。IE鼠標左鍵爲event.Button=1;Firefox鼠標左鍵爲event.Button=0。

8.解決單擊圖片無法拖拽的問題:IE通過ev.returnValue=false來防止圖片的事件,注意是放在document.onmousemove中,而Firefox通過ev.preventDefault();ev.stopPropagation();來防止圖片的事件,但是卻放在titleBar的mousedown事件中。

9.有一種情況,當瀏覽器窗口不是最大化時,你希望鼠標在瀏覽器外移動時瀏覽器裏的拖拽容器仍然移動,這時就要使用鼠標事件捕獲,IE中相應的是dragdiv.setCapture();與dragdiv.releaseCapture();而Firefox中相應的是window.captureEvents(Event.mousemove);與window.releaseEvents(dragdiv.mousemove)。

10.確保當每次拖拽時,拖拽容器中的z-index都不會被其他塊元素覆蓋。

發佈了39 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章