動態改變控件的位置

需求需要動態改變控件在頁面中的位置。例如有個頁面有三個div1,2和3,需要動態改變div的位置。條件是第一個div距頁面的高度不一定,並且三個div自身的高度也不一定。思路1通過div的絕對定位: 這就要求這個每個div是style=position:absolute(即此控件的位置是獨立的),因爲只有這樣才能通過座標來改變div的位置。但是這樣就需要指定每個div的高度,否則所有div就會默認在頁面的頭部,堆疊在一起。 1.首先通過如下方法求出第一個div距頁面頭部的高度,和距左面的距離。

function tixa_get_RealLeft(el) 
{ xPos = el.offsetLeft; tempEl = el.offsetParent; 
while (tempEl != null) { xPos += tempEl.offsetLeft; 
tempEl = tempEl.offsetParent; } return xPos; 
} 
function tixa_get_realTop(el) 
{ yPos = el.offsetTop; tempEl = el.offsetParent; 
while (tempEl != null) { yPos += tempEl.offsetTop; 
tempEl = tempEl.offsetParent; } return yPos; 
} 

 然後通過document.body.offsetHeight來獲取每個子頁面的值(我的每個div是通過jsp include的方式寫入頁面的,所以可以獲每個div的自身的高度)。然後通過第一個div距頁面頭部的高度和它自身的高度就可以得到第二個div 距頁面頭部的高度。依次類推每個div的距頁面頭部的高度都可以計算出來。這樣就可以通過document.getElementById(divID).style.top = div高度; 2.然後通過改變相應div的高度就可以交換每個div的位置了。 思路2同xml的增加刪除節點的方法來處理(不能忘記html也是一種)。以 把div2一道div1的前面爲例:document.getElementById(div2).parentNode.insertBefore( document.getElementById(div2).parentNode.removeChild( document.getElementById(div2)),document.getElementById(div1));

解釋:insertBefore是在一個節點的前面增加一個節點,參數1需要增加的節點,參數2:需要放在其前面的節點  ,removeChild方法是刪除一個節點,同時它的返回值是返回一個和被刪除的節點一莫一樣的一個節點,這樣正好加到div1的前面。由此可以看出兩種方法的優劣,往往一些事情如果坐起來很複雜,很有可能就是路子走錯了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章