簡單談?wù)刼ffsetleft、offsetTop和offsetParent
ele.offsetParent返回的是ele元素最近的并且是定位過(relative,absolute)的父元素,如果沒有父元素或者是父元素中沒有一個是定位過的,返回值就是body元素
ele.offsetLeft和ele.offsetTop取值問題,分多種情況:
- 如果ele是body的直接子元素,返回值則是ele距離body左側(cè)或頂部的距離
- 如果ele不是body的直接子元素,在父元素進行定位(relative,absolute)的情況下,各瀏覽器返回值都是ele距離父元素左側(cè)或者是
頂部的距離(唯一的區(qū)別就是chrome沒有把邊框計算進去,IE,firefox都計算進去了)
- 如果ele不是body的直接子元素,父元素也沒有進行定位的情況下,各瀏覽器返回的直接是ele元素距body的距離
從上面可以看出offsetLeft、offsetTop返回的值就是ele到offsetParent的距離,這個offsetParent是什么元素要看ele的父元素有沒有進行定位(relative、absolute)
應(yīng)用:
在要獲取元素距離網(wǎng)頁左側(cè)距離的時候就要考慮offsetParent的定位問題,不能簡單的用ele.offsetLeft/Top獲取,必須通過循環(huán)累加的方式才能獲得正確值(chrome的結(jié)果和IE、Firefox不一樣,相差1px,原因是chrome沒有把邊框計算進去),下面是代碼
(Tips:代碼中的this.left、this.top可以用arguments.callee代替,但根據(jù)ECMAScript 5規(guī)范不建議使用,strict model下已經(jīng)被禁用,因為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); } }
到此這篇關(guān)于offsetleft、offsetTop和offsetParent的文章就介紹到這了,更多相關(guān)offsetleft、offsetTop和offsetParent內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等屬性學(xué)習(xí)筆記
- 獲取offsetTop和offsetLeft值的js代碼(兼容)
- js中top、clientTop、scrollTop、offsetTop的區(qū)別 文字詳細(xì)說明版
- Javascript拖拽系列文章2之offsetLeft、offsetTop、offsetWidth、offsetHeight屬性
- 獲取任意Html元素與body之間的偏移距離 offsetTop、offsetLeft (For:IE5+ FF1 )[
- 在IE下:float屬性會影響offsetTop的取值
- top、clientTop、scrollTop、offsetTop
- offsetTop用法詳解
相關(guān)文章
解決html按鈕切換綁定不同函數(shù)后點擊時執(zhí)行多次函數(shù)問題
這篇文章主要介紹了如何解決html按鈕切換綁定不同函數(shù)后點擊時執(zhí)行多次函數(shù)問題,需要的朋友可以參考下2014-05-05基于IE下ul li 互相嵌套時的bug,排查,解決過程以及心得介紹
昨天到今天上午都在查一個IE的bug,情形如下:通過異步請求獲取json數(shù)據(jù),然后拼接成html代碼,最后使用innerHTML類似方法插入到文檔流中。在chrome下和IE8\9下均表現(xiàn)正常。結(jié)果已進入IE7,瀏覽器就崩潰,更別提IE6了,也是一副死給你看的樣子。于是我就把這個bug定位于IE6\7,其實這時候我已經(jīng)陷入了這個固定思維模式中,浪費了不少時間2013-05-05javascript 正則表達式觸發(fā)函數(shù)進行高級替換
如果在正則表達式中定義了子匹配,那么參數(shù)的長度會隨著子匹配的個數(shù)改變,如果沒有定義子匹配,那么長度是固定的。2010-03-03