日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
用Javascript獲取頁面元素的位置

制作網(wǎng)頁的過程中,你有時(shí)候需要知道某個(gè)元素在網(wǎng)頁上的確切位置。下面的教程總結(jié)了Javascript在網(wǎng)頁定位方面的相關(guān)知識。

我們提供的服務(wù)有:網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、麒麟ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的麒麟網(wǎng)站制作公司

一、網(wǎng)頁的大小和瀏覽器窗口的大小

首先,要明確兩個(gè)基本概念。

一張網(wǎng)頁的全部面積,就是它的大小。通常情況下,網(wǎng)頁的大小由內(nèi)容和CSS樣式表決定。

瀏覽器窗口的大小,則是指在瀏覽器窗口中看到的那部分網(wǎng)頁面積,又叫做viewport(視口)。

很顯然,如果網(wǎng)頁的內(nèi)容能夠在瀏覽器窗口中全部顯示(也就是不出現(xiàn)滾動條),那么網(wǎng)頁的大小和瀏覽器窗口的大小是相等的。如果不能全部顯示,則滾動瀏覽器窗口,可以顯示出網(wǎng)頁的各個(gè)部分。

二、獲取網(wǎng)頁的大小

網(wǎng)頁上的每個(gè)元素,都有clientHeight和clientWidth屬性。這兩個(gè)屬性指元素的內(nèi)容部分再加上padding的所占據(jù)的視覺面積,不包括border和滾動條占用的空間。

(圖一 clientHeight和clientWidth屬性)

因此,document元素的clientHeight和clientWidth屬性,就代表了網(wǎng)頁的大小。

 
 
 
 
  1.   function getViewport(){
  2.     if (document.compatMode == "BackCompat"){
  3.       return {
  4.         width: document.body.clientWidth,
  5.         height: document.body.clientHeight
  6.       }
  7.     } else {
  8.       return {
  9.         width: document.documentElement.clientWidth,
  10.         height: document.documentElement.clientHeight
  11.       }
  12.     }
  13.   }

上面的getViewport函數(shù)就可以返回瀏覽器窗口的高和寬。使用的時(shí)候,有三個(gè)地方需要注意:

1)這個(gè)函數(shù)必須在頁面加載完成后才能運(yùn)行,否則document對象還沒生成,瀏覽器會報(bào)錯(cuò)。

2)大多數(shù)情況下,都是document.documentElement.clientWidth返回正確值。但是,在IE6的quirks模式中,document.body.clientWidth返回正確的值,因此函數(shù)中加入了對文檔模式的判斷。

3)clientWidth和clientHeight都是只讀屬性,不能對它們賦值。

三、獲取網(wǎng)頁大小的另一種方法

網(wǎng)頁上的每個(gè)元素還有scrollHeight和scrollWidth屬性,指包含滾動條在內(nèi)的該元素的視覺面積。

那么,document對象的scrollHeight和scrollWidth屬性就是網(wǎng)頁的大小,意思就是滾動條滾過的所有長度和寬度。

仿照getViewport()函數(shù),可以寫出getPagearea()函數(shù)。

 
 
 
 
  1.   function getPagearea(){
  2.     if (document.compatMode == "BackCompat"){
  3.       return {
  4.         width: document.body.scrollWidth,
  5.         height: document.body.scrollHeight
  6.       }
  7.     } else {
  8.       return {
  9.         width: document.documentElement.scrollWidth,
  10.         height: document.documentElement.scrollHeight
  11.       }
  12.     }
  13.   }

但是,這個(gè)函數(shù)有一個(gè)問題。如果網(wǎng)頁內(nèi)容能夠在瀏覽器窗口中全部顯示,不出現(xiàn)滾動條,那么網(wǎng)頁的clientWidth和scrollWidth應(yīng)該相等。但是實(shí)際上,不同瀏覽器有不同的處理,這兩個(gè)值未必相等。所以,我們需要取它們之中較大的那個(gè)值,因此要對getPagearea()函數(shù)進(jìn)行改寫。

 
 
 
 
  1.   function getPagearea(){
  2.     if (document.compatMode == "BackCompat"){
  3.       return {
  4.         width: Math.max(document.body.scrollWidth,
  5.                 document.body.clientWidth),
  6.         height: Math.max(document.body.scrollHeight,
  7.                 document.body.clientHeight)
  8.       }
  9.     } else {
  10.       return {
  11.         width: Math.max(document.documentElement.scrollWidth,
  12.                 document.documentElement.clientWidth),
  13.         height: Math.max(document.documentElement.scrollHeight,
  14.                 document.documentElement.clientHeight)
  15.       }
  16.     }
  17.   }

四、獲取網(wǎng)頁元素的絕對位置

網(wǎng)頁元素的絕對位置,指該元素的左上角相對于整張網(wǎng)頁左上角的坐標(biāo)。這個(gè)絕對位置要通過計(jì)算才能得到。

首先,每個(gè)元素都有offsetTop和offsetLeft屬性,表示該元素的左上角與父容器(offsetParent對象)左上角的距離。所以,只需要將這兩個(gè)值進(jìn)行累加,就可以得到該元素的絕對坐標(biāo)。

(圖二 offsetTop和offsetLeft屬性)

下面兩個(gè)函數(shù)可以用來獲取絕對位置的橫坐標(biāo)和縱坐標(biāo)。

 
 
 
 
  1.   function getElementLeft(element){
  2.     var actualLeft = element.offsetLeft;
  3.     var current = element.offsetParent;
  4.     while (current !== null){
  5.       actualLeft += current.offsetLeft;
  6.       current = current.offsetParent;
  7.     }
  8.     return actualLeft;
  9.   }
  10.   function getElementTop(element){
  11.     var actualTop = element.offsetTop;
  12.     var current = element.offsetParent;
  13.     while (current !== null){
  14.       actualTop += current.offsetTop;
  15.       current = current.offsetParent;
  16.     }
  17.     return actualTop;
  18.   }

由于在表格和iframe中,offsetParent對象未必等于父容器,所以上面的函數(shù)對于表格和iframe中的元素不適用。

五、獲取網(wǎng)頁元素的相對位置

網(wǎng)頁元素的相對位置,指該元素左上角相對于瀏覽器窗口左上角的坐標(biāo)。

有了絕對位置以后,獲得相對位置就很容易了,只要將絕對坐標(biāo)減去頁面的滾動條滾動的距離就可以了。滾動條滾動的垂直距離,是document對象的scrollTop屬性;滾動條滾動的水平距離是document對象的scrollLeft屬性。

(圖三 scrollTop和scrollLeft屬性)

對上一節(jié)中的兩個(gè)函數(shù)進(jìn)行相應(yīng)的改寫:

 
 
 
 
  1.   function getElementViewLeft(element){
  2.     var actualLeft = element.offsetLeft;
  3.     var current = element.offsetParent;
  4.     while (current !== null){
  5.       actualLeft += current.offsetLeft;
  6.       current = current.offsetParent;
  7.     }
  8.     if (document.compatMode == "BackCompat"){
  9.       var elementScrollLeft=document.body.scrollLeft;
  10.     } else {
  11.       var elementScrollLeft=document.documentElement.scrollLeft; 
  12.     }
  13.     return actualLeft-elementScrollLeft;
  14.   }
  15.   function getElementViewTop(element){
  16.     var actualTop = element.offsetTop;
  17.     var current = element.offsetParent;
  18.     while (current !== null){
  19.       actualTop += current. offsetTop;
  20.       current = current.offsetParent;
  21.     }
  22.      if (document.compatMode == "BackCompat"){
  23.       var elementScrollTop=document.body.scrollTop;
  24.     } else {
  25.       var elementScrollTop=document.documentElement.scrollTop; 
  26.     }
  27.     return actualTop-elementScrollTop;
  28.   }

scrollTop和scrollLeft屬性是可以賦值的,并且會立即自動滾動網(wǎng)頁到相應(yīng)位置,因此可以利用它們改變網(wǎng)頁元素的相對位置。另外,element.scrollIntoView()方法也有類似作用,可以使網(wǎng)頁元素出現(xiàn)在瀏覽器窗口的左上角。

六、獲取元素位置的快速方法

除了上面的函數(shù)以外,還有一種快速方法,可以立刻獲得網(wǎng)頁元素的位置。

那就是使用getBoundingClientRect()方法。它返回一個(gè)對象,其中包含了left、right、top、bottom四個(gè)屬性,分別對應(yīng)了該元素的左上角和右下角相對于瀏覽器窗口(viewport)左上角的距離。

所以,網(wǎng)頁元素的相對位置就是

 
 
 
 
  1. var X= this.getBoundingClientRect().left;
  2. var Y =this.getBoundingClientRect().top;

再加上滾動距離,就可以得到絕對位置

 
 
 
 
  1. var X= this.getBoundingClientRect().left+document.documentElement.scrollLeft;
  2. var Y =this.getBoundingClientRect().top+document.documentElement.scrollTop;

目前,IE、Firefox 3.0+、Opera 9.5+都支持該方法,而Firefox 2.x、Safari、Chrome、Konqueror不支持。


新聞名稱:用Javascript獲取頁面元素的位置
網(wǎng)頁網(wǎng)址:http://www.dlmjj.cn/article/djhoedo.html