2013-07-11 73 views
0

對不起,如果這已經在那裏,但我一直在尋找一段時間,並沒有發現任何東西。我想知道是否有辦法,給定頁面上絕對定位元素的x和y座標/偏移量,將該元素更改爲相對定位的元素,但讓它保留在相同的視覺位置,更改它的位置在DOM中的位置。例如,假設這個網站將絕對定位轉換爲相對定位

<div id="divOne"></div> 
<div id="divTwo"></div> 
<div id="divThree"></div> 

如果divOne是絕對定位和它的位置正好在視覺上落divTwo和divThree之間,是有我的X轉換的方式,Y位置,以便我能告訴jQuery將它放在divOne之後和divTwo之前的DOM中?我對Javascript和jQuery非常熟悉,我只是在尋找一種我可能不知道的方法,或者從以前可能遇到過的人那裏得到答案。

+1

愚蠢的問題警示:爲什麼不只是保持絕對的? – aldux

+0

因爲我將它改爲絕對定位,以便在屏幕上拖動它。我希望能夠釋放鼠標按鈕,無論我釋放它,它都會在適當的位置重新插入DOM。我已經寫了拖動腳本。我只需要回到DOM部分。 –

+0

@SamuelReid如何讓他們在拖拽後保持絕對定位傷害任何東西? – Rooster

回答

0

通過刪除拖動的div的絕對位置,您必須將其標記放置在dom中的不同位置以重新定位它。

例如,如果你拖動#divOne,使其在視覺和#divTwo之間#divThree移動你應該做的是去除#divOne的絕對定位和移動其他兩個div之間出現的標籤:

<div id="divTwo"></div> 
<div id="divOne"></div> 
<div id="divThree"></div> 

如果你有一個明確的網格,這將工作。

如果我是你,我會做的是給我的網格中的任何div一個標準的類,我想重新安排。例如,班級「可安排」。當拖動火災時,我會使用以下公式計算我的拖動div必須放置在dom中的位置:

拖動的div應移動到dom上的其他位置。將會發生的事情是,拖動的div將取代現有的拖動div,並在其後面「推」現有的拖動div。例如,通過在#divTwo和#divThree之間拖動#divOne,#divOne代替#divThree並將其推後。假設用戶停止拖動並釋放鼠標左鍵,當拖動的div覆蓋現有div的位置將被採用(讓我們將其命名爲「delayedDiv」),那麼您所要做的就是識別推送的DIV ,從dom中取出被拖動的那個,放置在被識別的之前並使其位置相對。

爲了實現這是pushedDiv你可以使用這個程序:

//on drag end, where mouse has x and y coords: 
var pushedDiv; 
$(".arrangeable").each(function(index,value){ 
    var theoffset = $(this).offset(); 
    if(x >= theoffset .left && x <= theoffset .left + $(this).width() && y >= theoffset .top && y <= theoffset .top + $(this).height()){ 
     pushedDiv = $(this); 
    } 
}); 
// if pushedDiv is still null then the user didn't release the left click over a div of class "arrangeable". Else, the pushedDiv will be the one we are looking for 
+0

'你必須將它的標籤放在ordeer的dom中的不同位置以重新定位'這正是我想要做的。我喜歡你的解決方案。實際上很多。不幸的是,我認爲這是不夠的,因爲如果鼠標在divTwo和divThree之間的父元素上釋放,放置將不起作用,在這種情況下,它仍然應該放置元素。爲此,我認爲在釋放鼠標時,我必須沿着計算最接近鼠標元素的方向做一些事情,然後,如您所說,將其替換並將替換的元素放置在放下的元素之後。 –