摘要:元素的尺寸和位置元素的尺寸包括內(nèi)容區(qū)寬高不包括如果元素的是那么此時(shí)設(shè)置的就是該元素的也就是等于內(nèi)容區(qū)的寬高滾動(dòng)條。元素的位置使用我們可以得到元素相對于的位置。還有一種方法可以得到元素相對于最近定位的祖先元素的位置,就是使用和屬性。
DOM元素的尺寸和位置 DOM 元素的尺寸 DOM.offsetWidth/offsetHeight:
包括內(nèi)容區(qū)寬/高,padding,border,不包括margin.
如果元素的box-sizeing是border-box,那么此時(shí)設(shè)置的style.width/style.height就是該元素的offsetWidth/offsetHeight.也就是等于內(nèi)容區(qū)的寬/高 + padding + border + 滾動(dòng)條。
包括內(nèi)容區(qū)寬/高,padding,不包括border 和margin.
在box-sizing:border-box的情況下,等于style.width/height - border的寬度。
這里還有另外一種換算方法:clientWidth/clientHeight = offsetWidth/height - border - 滾動(dòng)條的寬/高
包括內(nèi)容區(qū)的寬/高,padding,以及子元素超出的寬/高,不包括border.
就是clientWidth / clientHeight 加上其子元素超出的寬/高。
box-sizing:border-box的情況也是一樣。
值得注意的是:這里 DOM的子元素超出部分 的計(jì)算隨著DOM的overflow的取值不同而略有不同。
如下:綠色盒子寬高100px,padding:20px;box-sizing:content-box里面有一個(gè)高度為200px的紅色盒子
當(dāng)綠色盒子的overflow為默認(rèn)值的時(shí)候,綠色盒子的scrollHeight = 上邊距 20px + 紅色盒子的高度 = 220px
當(dāng)綠色盒子的overflow屬性為auto,scroll,hidden中的任意一個(gè)的時(shí)候,其scrollHeight = 上邊距 + 下邊距 + 紅色盒子的高度 = 20 + 20 +200 = 240px
返回style屬性中的width和height。這兩個(gè)值根據(jù)box-sizing 的取值不同所表示的范圍也不同。
使用DOM.style.width/height 這種方式只能取到行內(nèi)樣式,而取不到CSS樣式中的屬性值。更多時(shí)候,我們可能需要的是這個(gè)方法:
window.getComputedStyle(DOM) 返回一個(gè)DOM元素計(jì)算后的style對象。
當(dāng)box-sizing:content-box的時(shí)候,style.width/height = offsetWidth/height - 滾動(dòng)條的寬/高 - border - 內(nèi)邊距。
當(dāng)box-sizing :border-box的時(shí)候,style.width/height 就等于offsetWidth / offsetHeight
的clientHeight 和clientWidth 永遠(yuǎn)等于viewport - 滾動(dòng)條的寬度/高度(移動(dòng)端除外),不論box-sizing的取值是什么。
返回一個(gè)DOMRect對象,包含left ,top,width,height 四個(gè)屬性的邊框集合
其中的left ,top 是相對于視口左上角而言的。如果元素滾動(dòng)了,left,top值也是變化的。width/height就是元素的盒子模型(border + padding + content + 滾動(dòng)條)的計(jì)算寬度和高度。對于html和body同樣適用。
使用element.getBoundingClientRect()我們可以得到元素相對于viewport的位置。
還有一種方法可以得到元素相對于最近定位的祖先元素的位置,就是使用element.offsetTop和element.offsetLeft 屬性。
這里有另外一個(gè)可以得到元素相對于根元素(通常情況下根元素指的是視口),根據(jù)element.offsetParent 一直向上查找,直到element.offsetParent == null。html,body的offsetParent都為null.
let current = element.offsetParent let top = element.offsetTop while(current){ top = current.offsetTop current = current.offsetParent }
值得注意的是,element.offsetTop/offsetLeft的計(jì)算的是element元素外邊框到包含它的元素的內(nèi)邊框之間的距離。所以嚴(yán)格上來說,應(yīng)該還要依據(jù)情況加上邊框的寬度的。但是邊框一般不會很大,最多1px 2px,所以可以忽略。
click 事件中鼠標(biāo)指針的位置在PC,移動(dòng)端的click事件中mouseEvent 都會包含以下信息:
e.clientX/e.clientY:返回鼠標(biāo)指針相對與瀏覽器窗口客戶區(qū)的坐標(biāo)。
e.pageX/e.pageY:返回鼠標(biāo)指針相對于整個(gè)文檔的坐標(biāo)。瀏覽器沒有滾動(dòng)條的時(shí)候,這個(gè)值和e.clientX/e.clientY 是一樣的。但是有滾動(dòng)條的時(shí)候,這個(gè)值就會比e.clientX/e.clientY大。
e.screenX/e.screenY返回鼠標(biāo)指針相對于整個(gè)屏幕的坐標(biāo)。哪怕此時(shí)你的瀏覽器被你縮小了移動(dòng)到了角落,它的計(jì)算基準(zhǔn)都是物理屏幕的左上角。
e.offsetX/e.offsetY返回鼠標(biāo)指針相對于e.target的坐標(biāo),這一點(diǎn)要區(qū)別于e.currentTarget。由于事件的冒泡,所以當(dāng)?shù)讓拥脑攸c(diǎn)擊事件冒泡到頂層的時(shí)候,在頂層事件處理函數(shù)中的event 對象中的offsetX/offsetY 還是相對于最初觸發(fā)的底層元素。
如果祖先元素有translate,scale貌似這個(gè)值獲取不對。。。
換一種方法獲取吧,e.clientX,e.clientY配合element.getBoundingClientRect()
function getOffset(e){ let target = e.currentTarget let rect = target.getBoundingClientRect() return { x: e.clientX - rect.left, y: e.clientY - rect.top } }
這樣子不管其祖先元素有沒有設(shè)置transform,都可以在點(diǎn)擊的時(shí)候獲得鼠標(biāo)指針位置相對于e.currentTarget的相對坐標(biāo)。
移動(dòng)端touch事件中一些關(guān)于位置的有用信息移動(dòng)端的touch 事件我們也能得到許多類似的信息,這些信息存在e.touches 的touch對象中。
touch.screenX/touch.screenY:返回相對于屏幕邊沿的坐標(biāo)。
touch.clientX/touch.clientY:返回相對于viewport邊沿的坐標(biāo)。
touch.pageX/touch.pageY:返回相對于文檔邊沿的坐標(biāo)。和clientX/clientY的區(qū)別跟上面差不多。
應(yīng)該來說,這三個(gè)值在移動(dòng)端很多時(shí)候都是相等的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/115629.html
摘要:元素的尺寸和位置元素的尺寸包括內(nèi)容區(qū)寬高不包括如果元素的是那么此時(shí)設(shè)置的就是該元素的也就是等于內(nèi)容區(qū)的寬高滾動(dòng)條。元素的位置使用我們可以得到元素相對于的位置。還有一種方法可以得到元素相對于最近定位的祖先元素的位置,就是使用和屬性。 DOM元素的尺寸和位置 DOM 元素的尺寸 DOM.offsetWidth/offsetHeight: 包括內(nèi)容區(qū)寬/高,padding,border,不...
摘要:元素的尺寸和位置元素的尺寸包括內(nèi)容區(qū)寬高不包括如果元素的是那么此時(shí)設(shè)置的就是該元素的也就是等于內(nèi)容區(qū)的寬高滾動(dòng)條。元素的位置使用我們可以得到元素相對于的位置。還有一種方法可以得到元素相對于最近定位的祖先元素的位置,就是使用和屬性。 DOM元素的尺寸和位置 DOM 元素的尺寸 DOM.offsetWidth/offsetHeight: 包括內(nèi)容區(qū)寬/高,padding,border,不...
摘要:整理獲取和尺寸和位置方法更多前端技術(shù)和知識點(diǎn),搜索訂閱號菌訂閱視口頁面或窗口的位置和寬高獲取視口寬高下面方法是包括滾動(dòng)條的寬高,不支持滾動(dòng)條另外瀏覽器兼容差,可獲取包括工具欄的寬高頁面滾動(dòng)位置返回整個(gè)頁面的滾動(dòng)的位置,與返回的值一致,前者是 showImg(https://segmentfault.com/img/remote/1460000018860153?w=640&h=426)...
摘要:如何獲取元素的真實(shí)尺寸呢通過下,介紹。這個(gè)函數(shù)主要提供給我們元素和寬度在內(nèi)的一系列值仍然不要妄想通過獲得,加上原先的,就可以減去和的值獲得元素的真實(shí)尺寸。 關(guān)于元素的尺寸和位置,這原本是 CSS 干的事,但更多的時(shí)候需要用 JavaScript 來獲取這些參數(shù),比如一個(gè)很好的例子 js 實(shí)現(xiàn)的圖片瀑布流。 showImg(https://segmentfault.com/img/bVG...
閱讀 1038·2021-11-23 09:51
閱讀 2365·2021-10-08 10:22
閱讀 2657·2021-09-29 09:35
閱讀 876·2021-09-22 15:20
閱讀 2873·2019-08-30 15:53
閱讀 2427·2019-08-30 13:55
閱讀 1113·2019-08-29 17:27
閱讀 2884·2019-08-29 17:26