动态改变控件的位置

需求需要动态改变控件在页面中的位置。例如有个页面有三个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的前面。由此可以看出两种方法的优劣,往往一些事情如果坐起来很复杂,很有可能就是路子走错了。

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