獲取height固定摺疊元素真實高度方法

2022-01-13 08:05:31 字數 1407 閱讀 5865

假設,dom 被設定了 height:20px 和 overflow:hidden,如何計算它的真實高度呢?

最近在優化摺疊元件,需要在視窗寬度變化的時候重新判斷展開收起狀態。如果段落高度大於給定高度,則隱藏超高內容,展示【展開】按鈕。如果段落高度小於給定高度,則不限制最大高度,隱藏【展開】按鈕。

但如何計算【段落高度小於給定高度】呢?比如,段落被設定了 height="20px",如何計算它的真實高度呢?

方法如下,直接傳入要計算的目標 dom 就好了。

function getheightunfold (dom)
這個方法的核心是,建立乙個不可見元素,摘除高度限制,最終計算它的高度。

1. 複製元素的必要性

jenny_l 給複製出來的元素增加了postiion: absolute屬性,為了不觸發後面元素的重拍重繪,節省瀏覽器資源。如果直接快速地給目標元素設定height: auto+ 獲取高度 +height: 20px,雖然能達到目的,但會造成所有後續元素的(不一定可見)抖動,盡量避免。

2. node.clonenode 與 document.createelement('div') 的選擇

後者與innerhtml配合使用,雖然能夠模仿目標元素的內層內容,但不能繼承目標元素的樣式。即使使用document.createelement(dom.nodename)也會有問題,不能繼承內聯樣式。而使用clonenode不但可以繼承 class,css,還能觸發 createdcallback(如果有的話),繼承 js 中新增的內聯樣式。

3. fakenode.getboundingclientrect().height 與 getcomputedstyle(fakenode).height 的選擇

都是計算高度的,但前者計算的是佔位高度,包括 padding+border;後者計算的是單純高度,經過多層 css 優先順序競爭之後的 height 取值(px),獲取純數值還需要parseint()。本次情況,需要計算佔位高度,所以選擇getboundingclientrect()

4. removechild 的必要性

雖然 fakenode 不可見,但終究在文件流中,display 不是 none,重拍的時候會參與計算。除此之外,如果原先 dom 帶有 id="someid" 的話,刪除 fakenode 之前,文件中就會存在兩個 id="someid" 的元素。未來瀏覽器再做選擇的時候,就懵逼了。

好久不寫文章了,草稿箱裡存了好多**片段,要加油了。

不得不說,這種小**片段還是很有分享價值的,一次研究(竟然花了乙個小時),未來處處複製,走向人生巔峰。

獲取元素寬高

獲取元素寬高值 1.內聯樣式.element.style讀取的只是元素內聯樣式,即寫在元素的 style 屬性上的樣式,支援讀寫.var elebox document.getelementbyid eleid var h elebox.style.height 外聯樣式 巢狀樣式無法通過上述方法直...

獲取元素高寬

element.clientwidth屬性表示元素的內部寬度,以畫素計。該屬性包括內邊距,但不包括垂直滾動條 如果有 邊框和外邊距 element.getboundingclientrect width有內邊距和邊框,無外邊距 element.style.width 只能去內聯樣式的寬window....

IOS獲取螢幕的真實寬高

小弟最近在開發ios應用,卻發現乙個問題,ios7和ios8在橫屏模式下得到的寬高是不一樣的,豎屏是一樣的,但是在網上卻沒有找到類似的解決方法,於是自己寫了乙個方法,如要使用,直接貼上到viewcontroller即可 根據系統版本號得到真實的寬高 iswidth是yes,那麼代表得到寬度,是no代...