問題的提出:
在一個使用者列表中,當點擊使用者時候,彈出這個使用者的詳細資料,怎麼做?當然了,如果你想彈出一個新頁面,那就算求了,就不用看這個,這個時候如果彈出一個新頁面,就是說會向伺服器回傳一次,速度就降低了撒,使用最好是直接彈出一個層,然後在這個層裡面現實這個人的詳細資料。而這個層你不會讓人家固定在一個地方撒?對不對?好,那你就要去擷取你點擊的地方的X,Y座標了,但是這樣不行啊,你得指定一個地方啊,如果亂點把這個層彈出來就惱火了撒,所以,咱們就指定只能在一個按鈕上點擊才會彈出這個層,那麼現在你就要去擷取這個按鈕的ID了,這樣來間接的擷取這個按鈕的X,Y座標,因為如果直接用ClientX與ClientY 的話,也不太美觀,要求是對於一條記錄,在指定位置彈出。
我用的AJAX是ASP.NET AJAX,簡單,首先簡曆一個層,托一個UPDATEPANEL上去,然後再整一個FORMVIEW,當然了,還是稍微美化一下哈,不然有點難看。
順便看看擷取點擊對象的ID,簡單:var ID = event.srcElement.ID就可以了。
然後再去獲得這個對象的絕對座標,怎麼去獲得絕對座標?
JS裡面給我們提供的函數只有offsetTop 喝offsetLeft這樣的東西,但是這個值是指定對象相對於上層控制項的距離,這樣得到的位置不是相對於螢幕的絕對位置
所以我們只能迴圈擷取,知道這個對象為最外層的對象,那才得到了對於螢幕的絕對座標
function getAbsPoint(ID)
{
var x = ID.offsetLeft, y = ID.offsetTop;
while(ID==.offsetParent)
{
x += ID.offsetLeft;
y += ID.offsetTop;
}
這樣我們就擷取這個指定ID屬性相對於螢幕的絕對座標。
還有一種方法,
function getAbsPoint(obj)
{
var x,y;
oRect = obj.getBoundingClientRect();
x=oRect.left;
y=oRect.top;
}
這種方法要簡單些,不過有時候取得的座標值不穩定,原因不曉得,所以我就用的第一種方法,好了
獲得了這個對象的X,Y絕對座標後,後面定位層的位置你就曉得該囊個做了撒?
document.getElementById("div1").style.left = x;
當然了,這個層的position肯定是absolute,不然介面就難看了。
alert("x:"+x+","+"y:"+y);
順便整幾個JS常用函數
JS中獲得視窗屬性的方法
1。獲得螢幕的解析度:
screen.width
screen.height
2。獲得視窗大小:
document.body.clientWidth
document.body.clientHeight
3。獲得視窗大小(包含Border、Scroll等元素)
document.body.offsetWidth
document.body.offsetHeight