国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > JavaScript > 正文

用Javascript獲取頁面元素的具體位置

2019-11-20 21:30:02
字體:
來源:轉載
供稿:網友
制作網頁的過程中,你有時候需要知道某個元素在網頁上的確切位置。

下面的教程總結了Javascript在網頁定位方面的相關知識。

一、網頁的大小和瀏覽器窗口的大小

首先,要明確兩個基本概念。

一張網頁的全部面積,就是它的大小。通常情況下,網頁的大小由內容和CSS樣式表決定。

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

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

二、獲取網頁的大小

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

因此,document元素的clientHeight和clientWidth屬性,就代表了網頁的大小。
復制代碼 代碼如下:

  function getViewport(){
    if (document.compatMode == "BackCompat"){
      return {
        width: document.body.clientWidth,
        height: document.body.clientHeight
      }
    } else {
      return {
        width: document.documentElement.clientWidth,
        height: document.documentElement.clientHeight
      }
    }
  }

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

1)這個函數必須在頁面加載完成后才能運行,否則document對象還沒生成,瀏覽器會報錯。

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

3)clientWidth和clientHeight都是只讀屬性,不能對它們賦值。
三、獲取網頁大小的另一種方法

網頁上的每個元素還有scrollHeight和scrollWidth屬性,指包含滾動條在內的該元素的視覺面積。

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

仿照getViewport()函數,可以寫出getPagearea()函數。
復制代碼 代碼如下:

  function getPagearea(){
    if (document.compatMode == "BackCompat"){
      return {
        width: document.body.scrollWidth,
        height: document.body.scrollHeight
      }
    } else {
      return {
        width: document.documentElement.scrollWidth,
        height: document.documentElement.scrollHeight
      }
    }
  }

但是,這個函數有一個問題。如果網頁內容能夠在瀏覽器窗口中全部顯示,不出現滾動條,那么網頁的clientWidth和scrollWidth應該相等。但是實際上,不同瀏覽器有不同的處理,這兩個值未必相等。所以,我們需要取它們之中較大的那個值,因此要對getPagearea()函數進行改寫。
復制代碼 代碼如下:

  function getPagearea(){
    if (document.compatMode == "BackCompat"){
      return {
        width: Math.max(document.body.scrollWidth,
                document.body.clientWidth),
        height: Math.max(document.body.scrollHeight,
                document.body.clientHeight)
      }
    } else {
      return {
        width: Math.max(document.documentElement.scrollWidth,
                document.documentElement.clientWidth),
        height: Math.max(document.documentElement.scrollHeight,
                document.documentElement.clientHeight)
      }
    }
  }

四、獲取網頁元素的絕對位置

網頁元素的絕對位置,指該元素的左上角相對于整張網頁左上角的坐標。這個絕對位置要通過計算才能得到。

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

下面兩個函數可以用來獲取絕對位置的橫坐標和縱坐標。
復制代碼 代碼如下:

  function getElementLeft(element){
    var actualLeft = element.offsetLeft;
    var current = element.offsetParent;

    while (current !== null){
      actualLeft += current.offsetLeft;
      current = current.offsetParent;
    }

    return actualLeft;
  }

  function getElementTop(element){
    var actualTop = element.offsetTop;
    var current = element.offsetParent;

    while (current !== null){
      actualTop += current.offsetTop;
      current = current.offsetParent;
    }

    return actualTop;
  }

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

五、獲取網頁元素的相對位置

網頁元素的相對位置,指該元素左上角相對于瀏覽器窗口左上角的坐標。

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

對上一節(jié)中的兩個函數進行相應的改寫:
復制代碼 代碼如下:

  function getElementViewLeft(element){
    var actualLeft = element.offsetLeft;
    var current = element.offsetParent;

    while (current !== null){
      actualLeft += current.offsetLeft;
      current = current.offsetParent;
    }

    if (document.compatMode == "BackCompat"){
      var elementScrollLeft=document.body.scrollLeft;
    } else {
      var elementScrollLeft=document.documentElement.scrollLeft;
    }

    return actualLeft-elementScrollLeft;
  }

  function getElementViewTop(element){
    var actualTop = element.offsetTop;
    var current = element.offsetParent;

    while (current !== null){
      actualTop += current. offsetTop;
      current = current.offsetParent;
    }

     if (document.compatMode == "BackCompat"){
      var elementScrollTop=document.body.scrollTop;
    } else {
      var elementScrollTop=document.documentElement.scrollTop;
    }

    return actualTop-elementScrollTop;
  }

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

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

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

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

所以,網頁元素的相對位置就是
復制代碼 代碼如下:

  var X= this.getBoundingClientRect().left;

  var Y =this.getBoundingClientRect().top;

再加上滾動距離,就可以得到絕對位置
復制代碼 代碼如下:

  var X= this.getBoundingClientRect().left+document.documentElement.scrollLeft;

  var Y =this.getBoundingClientRect().top+document.documentElement.scrollTop;

目前,IE、Firefox 3.0+、Opera 9.5+都支持該方法,而Firefox 2.x、Safari、Chrome、Konqueror不支持。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
久久精品视频免费看| 尤物视频在线观看视频| 日本调教视频在线观看| av免费在线播放| 天天激情综合| 丁香花高清在线观看完整版| 一二三四区在线观看| www.av在线视频| 国产美女视频一区二区二三区 | 国产免费麻豆视频| 狠狠狠综合7777久夜色撩人| 天天操夜夜操天天射| 国产精品入口麻豆免费| 中文字幕av在线播放| 青青草视频免费在线观看| 中文字幕有码在线视频| 中文国产字幕在线观看| 久热国产在线视频| 国产黄视频在线观看| 伊人222成人综合网| 九九热视频免费观看| 国产激情在线| 国产美女一区视频| 欧美日韩视频精品二区| 国产porny蝌蚪视频| 成人免费一区二区三区牛牛| 中文日本在线观看| 国产午夜在线| 99视频资源网| 国产秒拍福利视频露脸| 午夜性爽视频男人的天堂| 国产精品黄页网站在线播放免费| 操操操综合网| www.麻豆av.com| 国产精品久久久久白浆| 国产免费黄网站| 久蕉依人在线视频| 另类视频在线| 免费av不卡在线观看| 亚洲精品自拍区在线观看| 国产高清视频免费最新在线| 最近中文字幕在线中文视频 | 中中文字幕av在线| 亚洲综合在线免费| 中文视频在线| 尤物在线网址| 国产麻豆精品高清在线播放| 四虎国产精品永久地址998| 影音先锋日韩| 色综合久久五月天| 日本黄在线观看| www.操操操.com| 超碰在线影院| 午夜视频在线免费| 国产精品麻豆一区二区三区 | 在线观看免费高清完整| 国产成人精品综合网站| 国产国语**毛片高清视频| 国产中文字幕在线| 最新av免费看| av超碰在线| 九色成人在线| 2020亚洲男人天堂| 超碰97在线免费观看| 中文字幕在线视频免费观看| 国产极品视频| 久久精品国产亚洲777| 午夜免费视频在线国产| 国产不卡精品一区二区三区| 蜜桃视频中文字幕| 精品亚洲成a人片在线观看| av黄色在线观看| 免费在线黄色网址| 2019中文字幕在线视频| 久草视频国产| 亚洲欧美精选| 国产青青草在线| 久草在线视频网| 在线成人一区| 国产精品99爱免费视频| 黄色免费av| 在线午夜影院| 国产精品入口麻豆免费观看| gogo在线观看| 国产www在线观看| 国产中文字幕在线播放| 在线亚洲精品自拍| 国产福利片在线| 国产私人影院| 1区2区3区在线| 国产中文在线视频| xxx国产精品| 欧美专区日韩| 免费国产在线视频| 四虎精品成人a在线观看| 99久久免费精品国产免费| 国产精品久久久久久久久鸭 | 国产精品作爱| 日本不卡影院| 国产福利电影在线观看| 国产精品入口麻豆免费观看| 午夜视频99| 国产天堂在线| 国产精品久久人| 国产极品一区二区三区| 精品一区二区三区免费站| 国产福利视频在线| 91美女在线| 在线三级中文| 日本不卡1区2区3区| 美女永久在线网站| 黄色片免费在线| 国产麻豆综合视频在线观看| 成人无遮挡免费网站视频在线观看| av麻豆国产| 国产在线看片| 国产日韩网站| 亚洲91av| 天天草天天草| www.狠狠操| 成人免费一区二区三区视频网站| 丁香花高清在线观看完整版| 国产亚洲精品久久久久久移动网络 | 天天插天天狠天天透| 亚洲免费网站在线观看| 青娱乐在线视频观看| 黄色国产网站在线观看| 国产一级在线观看www色| 999福利在线视频| 超碰在线中文| 国产精品bbw一区二区三区| 99精品老司机免费视频| 国产精品偷乱一区二区三区| 国产成a人亚洲精v品| 久久久久久久久久久久久91| 国产乱子视频| 亚洲尤物在线视频| 任你操在线观看| 91九色在线看| 91超碰国产在线| 一本免费视频| 国产精品美女一区二区三区四区 | 九九视频九九热| 国产一级免费看| 欧美性猛交xxxx免费看久久| 国产色在线播放| 久久99亚洲网美利坚合众国| 精品国产福利一区二区在线| 高潮白浆视频| 天堂√中文在线| 999福利在线视频| 国产黄色片在线播放| 国产羞羞视频在线播放| 久久精品蜜桃| 久草国产视频| 国产中文字幕第一页| 黄色免费av| 成人福利视频导航| 老师我好爽再深一点的视频| 小说区乱图片区| 天堂√中文在线| 四虎免费视频| 青青草中文字幕| 欧美色第一页| 久久久久久日本一区99| wwww亚洲| 青草视频在线播放| 日韩在线天堂| 久久五月精品中文字幕 | 国产精品欧美色图| 91福利在线免费| 国产三区在线观看| 国产成人综合美国十次| 精品国产二区三区| v天堂福利视频在线观看| 久久久久久91精品色婷婷| 国产免费视频在线| 久久亚洲资源| 国产高清av| 亚洲网站视频在线观看| 久久久久久久久亚洲精品| 国产理论电影在线| 69视频在线| 开心丁香婷婷深爱五月| 中文字幕一区免费| 99re在线视频| 狠狠干天天爱| 中文字幕av在线| 黄色网页网址在线免费| 国产不卡在线| 九九热在线免费视频| 国产精品白浆视频免费观看| 伊人网在线观看| 国产一级在线观看www色| 99久热re在线精彩视频| 国产蜜臀av在线播放| av手机天堂| 国产youjizz在线| 中文字幕在线资源| 免费a在线观看|