1. 程式人生 > 程式設計 >簡單談談offsetleft、offsetTop和offsetParent

簡單談談offsetleft、offsetTop和offsetParent

ele.offsetParent返回的是ele元素最近的並且是定位過(relative,absolute)的父元素,如果沒有父元素或者是父元素中沒有一個是定位過的,返回值就是body元素

ele.offsetLeft和ele.offsetTop取值問題,分多種情況:

  • 如果ele是body的直接子元素,返回值則是ele距離body左側或頂部的距離
  • 如果ele不是body的直接子元素,在父元素進行定位(relative,absolute)的情況下,各瀏覽器返回值都是ele距離父元素左側或者是
    頂部的距離(唯一的區別就是chrome沒有把邊框計算進去,IE,firefox都計算進去了)
  • 如果ele不是body的直接子元素,父元素也沒有進行定位的情況下,各瀏覽器返回的直接是ele元素距body的距離

從上面可以看出offsetLeft、offsetTop返回的值就是ele到offsetParent的距離,這個offsetParent是什麼元素要看ele的父元素有沒有進行定位(relative、absolute)

應用:

在要獲取元素距離網頁左側距離的時候就要考慮offsetParent的定位問題,不能簡單的用ele.offsetLeft/Top獲取,必須通過迴圈累加的方式才能獲得正確值(chrome的結果和IE、Firefox不一樣,相差1px,原因是chrome沒有把邊框計算進去),下面是程式碼

(Tips:程式碼中的this.left、this.top可以用arguments.callee代替,但根據ECMAScript 5規範不建議使用,strict model下已經被禁用,因為arguments是一個比較龐大的物件,非常耗資源)

var getOffset = {
 left:function(obj){
  return obj.offsetLeft + (obj.offsetParent ? this.left(obj.offsetParent) : 0);
 },top:function(){
  return obj.offsetTop + (obj.offsetParent ? this.top(obj.offsetParent) : 0);
 }
}

到此這篇關於offsetleft、offsetTop和offsetParent的文章就介紹到這了,更多相關offsetleft、offsetTop和offsetParent內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!