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