前言
在使用 uniapp 開發小程式流程中,我們常常會遇到需要取得 DOM 元素高度的情況。但是,有時候我們會發現透過 uni.createSelectorQuery().select().boundingClientRect() 所獲得的高度並不準確。那麼這種情況是怎麼出現的呢?又該如何解決呢?本文將為大家詳細講解。
問題出現
首先,我們先來重現問題。如下面這個簡單的模板,我們需要取得子元素 content
的高度。
<template> <view> <view>内容区域</view> </view> </template>
我們可以透過以下方式取得content
元素的高度:
mounted() { uni.createSelectorQuery().in(this).select('.content').boundingClientRect(rect => { console.log(rect.height) }).exec() }
這樣我們就可以在控制台裡看到content
的高度。
但是,當我們為content
元素加上一些樣式,例如:
.content { margin: 10px; padding: 20px; }
再次運行程序,我們會發現控制台輸出的高度與我們預期的高度不一致,略小於我們期望的高度。這就是我們經常遇到的「取得 DOM 高度不準確」的問題。
原因分析
那麼,問題出現的原因是什麼呢?在經過查閱資料後,我們可以得知以下原因:
1.單獨使用這個樣式會導致高度計算錯誤,產生白邊。
2.這是因為margin
和padding
對於元素佔據的空間是不一樣的,margin
是不佔據空間的,而padding
是佔據空間的。
由於boundingClientRect
受到了padding
和border
的影響,而margin
不受影響,所以在boundingClientRect
取得的高度時會少去padding
的高度。
解決方案
既然掌握了問題出現的原因,解決方案也就呼之欲出了。我們可以透過以下方法來解決這個問題:
1.透過uni.createSelectorQuery().exec()
取得父元素的高度,再透過getComputedStyle
取得子元素的padding
和border
,從而計算出子元素的實際高度。
mounted() { uni.createSelectorQuery().in(this).select('.container').boundingClientRect(rect => { const styles = getComputedStyle(this.$refs.content.$el) const paddingTop = parseInt(styles.paddingTop) const paddingBottom = parseInt(styles.paddingBottom) const borderTop = parseInt(styles.borderTopWidth) const borderBottom = parseInt(styles.borderBottomWidth) console.log(rect.height - paddingTop - paddingBottom - borderTop - borderBottom) }).exec() }
2.透過為子元素和父元素都加上 box-sizing:border-box
樣式來解決問題。
.container, .content { box-sizing: border-box; margin: 10px; padding: 20px; }
這裡我們需要注意兩點:
(1)box-sizing
樣式需要加在兩個元素身上。
(2)需要注意子元素和父元素之間的間隔是否有誤。
結語
透過上述方法,我們可以解決 uniapp 取得 DOM 高度不準確的問題。請大家根據具體情況選擇使用,希望本文能對大家有幫助。
以上是uniapp怎麼取得dom高度不準確的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了有關移動和網絡平台的調試策略,突出顯示了Android Studio,Xcode和Chrome DevTools等工具,以及在OS和性能優化的一致結果的技術。

文章討論了用於Uniapp開發的調試工具和最佳實踐,重點關注Hbuilderx,微信開發人員工具和Chrome DevTools等工具。

本文討論了跨多個平台的Uniapp應用程序的端到端測試。它涵蓋定義測試方案,選擇諸如Appium和Cypress之類的工具,設置環境,寫作和運行測試,分析結果以及集成

本文討論了針對Uniapp應用程序的各種測試類型,包括單元,集成,功能,UI/UX,性能,跨平台和安全測試。它還涵蓋了確保跨平台兼容性,並推薦Jes等工具

本文討論了UNIAPP開發中的共同績效抗模式,例如過度的全球數據使用和效率低下的數據綁定,並提供策略來識別和減輕這些問題,以提高應用程序性能。

本文討論了通過壓縮,響應式設計,懶惰加載,緩存和使用WebP格式來優化Uniapp中的圖像,以更好地進行Web性能。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能