javascript 拖拽JavaScript Google IG Drag Demo,非常棒的拖動,準備用於F2Blog新Theme的後台模組設定,之間的拖
動
拖拽效果的頁面效果示範地址:http://img.jb51.net/online/tuozhuai/google_drag.htm
加強版效果示範地址:http://img.jb51.net/online/tuozhuai/google_drag2.htm
拖拽原理:
關於拖拽的基礎,可以參考這篇文章,講得非常不錯。
其實原理很簡單,就是把綁定三個事件:onmousedown , onmousemove , onmouseup。
在滑鼠點下時(onmousedown)把元素的座標設定為滑鼠的座標,並把 position 設定為絕對座標。
在滑鼠移動時(onmousemove)改變元素座標。
在滑鼠彈起時(onmouseup)取消綁定的事件,並做後續操作。
javascript 拖拽下面是關於仿 google 個人化首頁拖拽效果的一個 Demo (需包含 prototype)。 完整下載包:Google
Drag.rar (19.82 KB ,下載:247次)
總共有四個檔案:
google_drag.html
prototype.js
通用拖拽函數 drag.js
仿 google 個人化首頁的拖拽 google_drag.js
google_drag.html 中最後幾行中有個初始化拖拽函數
window.onload = function(){initDrag();}
必須寫成這樣,如果直接寫成
window.onload = initDrag();
這樣會在 IE 下報個錯誤:尚未實現
其他代碼可以直接查看源碼,就幾行注釋。其實就是用 JavaScript 繪製了 15 個 div,然後設定它們
class 都為drag_div (後面是通過 className 來判斷元素是否可拖拽),然後把可拖拽的部分的 ID 設定
元素的 ID 後加個 _h(也可設定自己為拖拽部分)
drag.js 是一個比較通用的拖拽函數。裡麵包含四個最簡單的函數:start_Drag, when_Drag, end_Drag,
after_Drag。這四個函數只是實現最基本的拖拽功能,要實現其他功能可修改或在後面覆蓋掉這些函數。
google_drag.js 是仿 google 個人化首頁拖拽效果的函數。它覆蓋了上面說的那個四個函數,實現比較
進階的效果。
拖拽其實應該還是比較簡單的,實現完拖拽後就是要用 Ajax 來傳遞拖拽後的位置,改變伺服器端的值,
這樣下次使用者訪問時元素才會位置不變。效果的實現是非常簡單的,主要是怎麼融合到已有的項目中,從
而提高使用者體驗。
這個 Demo 有一部分參考的網上的代碼。
在網上還有很多這種例子,不過感覺效率都沒這個高。有一些例子是把所有元素的位置都設定為
absolute,然後直接修改各個元素的 top 和left來顯示效果,感覺那個不是很通用,那樣的話比如我要
把這個效果修改為一個數的拖拽,並且記錄各個元素之間的位置,比較麻煩。這個例子中要記錄元素的位
置,只需在拖拽完成後記錄被拖拽元素的 id 以及拖拽到了哪個元素的前面然後傳給伺服器端去修改就可
以了。
Update 2007-01-26 1:22
加了個加強版的,效果請看 Demo。其實就是加了個函數,讓他保證左上方那個大塊只會有一個元素,如
果超過一個則把後面的擠到下面的第一列去,如果沒有元素則從下面的第一列拿出第一個元素放到左上方
的大塊中,如果下面的第一列沒有元素,則找第二列,第三列。