offsetleft、offsetTop、offsetParent的兼容性問題


先來看看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沒有把邊框計算進去),下面是代碼
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);
	}
};

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM