Heim Web-Frontend uni-app Wie man die Domhöhe in Uniapp ermittelt, ist ungenau

Wie man die Domhöhe in Uniapp ermittelt, ist ungenau

Apr 27, 2023 am 09:08 AM

Vorwort

Bei der Entwicklung kleiner Programme mit uniapp stoßen wir häufig auf Situationen, in denen wir die Höhe von DOM-Elementen ermitteln müssen. Manchmal stellen wir jedoch fest, dass die über uni.createSelectorQuery().select().boundingClientRect() erhaltene Höhe nicht korrekt ist. Wie kam es also zu dieser Situation? Wie kann man es lösen? Dieser Artikel wird es Ihnen im Detail erklären.

Es tritt ein Problem auf

Reproduzieren wir zunächst das Problem. In der einfachen Vorlage unten müssen wir beispielsweise die Höhe des untergeordneten Elements content ermitteln. content 的高度。

<template>
  <view class="container">
    <view class="content" ref="content">内容区域</view>
  </view>
</template>
Nach dem Login kopieren

我们可以通过以下方式获取 content 元素的高度:

mounted() {
  uni.createSelectorQuery().in(this).select('.content').boundingClientRect(rect => {
    console.log(rect.height)
  }).exec()
}
Nach dem Login kopieren

这样我们就可以在控制台里看到 content 的高度。

但是,当我们给 content 元素加上一些样式,比如:

.content {
  margin: 10px; 
  padding: 20px;
}
Nach dem Login kopieren

再次运行程序,我们会发现控制台输出的高度与我们预期的高度不一致,略小于我们期望的高度。这就是我们经常遇到的“获取 DOM 高度不准确”的问题。

原因分析

那么,问题出现的原因是什么呢?在经过查阅资料后,我们可以得知以下原因:

1.单独使用这个样式会导致高度计算错误,产生白边。

2.这是因为 marginpadding 对于元素占据的空间是不一样的,margin 是不占据空间的,而 padding 是占据空间的。

由于 boundingClientRect 受到了 paddingborder 的影响,而 margin 不受影响,所以在 boundingClientRect 获取的高度时会少去 padding 的高度。

解决方案

既然掌握了问题出现的原因,解决方案也就呼之欲出了。我们可以通过以下方法来解决这个问题:

1.通过 uni.createSelectorQuery().exec() 获取父元素的高度,再通过 getComputedStyle 获取子元素的 paddingborder,从而计算出子元素的实际高度。

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()
}
Nach dem Login kopieren

2.通过给子元素和父元素都加上 box-sizing:border-box 样式来解决问题。

.container,
.content {
  box-sizing: border-box;
  margin: 10px;
  padding: 20px;
}
Nach dem Login kopieren

这里我们需要注意两点:

(1)box-sizingrrreee

Wir können die Höhe des content-Elements auf folgende Weise ermitteln:

rrreee

So können wir die Höhe von content in der Konsole sehen.

Wenn wir jedoch einige Stile zum content-Element hinzufügen, wie zum Beispiel:

rrreee

Führen Sie das Programm erneut aus, werden wir feststellen, dass die Höhe der Konsolenausgabe nicht mit der erwarteten Höhe übereinstimmt. etwas kleiner als das, was wir hoch erwartet hatten. Dies ist das Problem der „ungenauen Erfassung der DOM-Höhe“, auf das wir häufig stoßen. 🎜🎜Ursachenanalyse🎜🎜Was ist also die Ursache des Problems? Nach Durchsicht der Daten können wir die folgenden Gründe herausfinden: 🎜🎜1. Die alleinige Verwendung dieses Stils führt zu Fehlern bei der Höhenberechnung und weißen Kanten. 🎜🎜2. Dies liegt daran, dass margin und padding unterschiedliche Leerzeichen für Elemente belegen, während padding code> nimmt Platz ein. 🎜🎜Da <code>boundingClientRect von padding und border betroffen ist, margin jedoch nicht betroffen ist, gilt in boundingClientRect ist geringer als die Höhe von padding. 🎜🎜Lösung🎜🎜Da wir nun die Ursache des Problems erkannt haben, steht die Lösung bereit. Wir können dieses Problem mit den folgenden Methoden lösen: 🎜🎜1. Ermitteln Sie die Höhe des übergeordneten Elements über uni.createSelectorQuery().exec() und rufen Sie dann das untergeordnete Element über getComputedStyle ab padding und border, um die tatsächliche Höhe des untergeordneten Elements zu berechnen. 🎜rrreee🎜2. Lösen Sie das Problem, indem Sie den Stil box-sizing:border-box sowohl zum untergeordneten Element als auch zum übergeordneten Element hinzufügen. 🎜rrreee🎜Wir müssen hier auf zwei Punkte achten: 🎜🎜 (1) Der box-sizing-Stil muss zu zwei Elementen hinzugefügt werden. 🎜🎜(2) Sie müssen darauf achten, ob der Abstand zwischen dem untergeordneten Element und dem übergeordneten Element falsch ist. 🎜🎜Fazit🎜🎜Durch die oben genannten Methoden können wir das Problem der hohen Ungenauigkeit beim Erhalten von DOM durch uniapp lösen. Bitte wählen Sie die Verwendung entsprechend Ihrer spezifischen Situation. Ich hoffe, dass dieser Artikel für Sie hilfreich sein kann. 🎜

Das obige ist der detaillierte Inhalt vonWie man die Domhöhe in Uniapp ermittelt, ist ungenau. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie benutze ich Präprozessoren (sass, weniger) mit UNI-App? Wie benutze ich Präprozessoren (sass, weniger) mit UNI-App? Mar 18, 2025 pm 12:20 PM

In Artikel werden SASS und weniger Präprozessoren in Uni-App unter Verwendung von Setup, Vorteilen und doppelter Nutzung erläutert. Der Schwerpunkt liegt auf Konfiguration und Vorteilen. [159 Zeichen]

Wie benutze ich die Animations-API von Uni-App? Wie benutze ich die Animations-API von Uni-App? Mar 18, 2025 pm 12:21 PM

In dem Artikel wird erläutert, wie die Animations-API von Uni-App verwendet wird und Schritte zum Erstellen und Anwenden von Animationen, Schlüsselfunktionen und Methoden zum Kombinieren und Steuerungsanimations-Timing verwendet. Character Count: 159

Was sind die verschiedenen Arten von Tests, die Sie in einer UNIAPP -Anwendung durchführen können? Was sind die verschiedenen Arten von Tests, die Sie in einer UNIAPP -Anwendung durchführen können? Mar 27, 2025 pm 04:59 PM

In dem Artikel werden verschiedene Testtypen für UNIAPP-Anwendungen erörtert, einschließlich Einheiten, Integration, Funktions-, UI/UX-, Leistung, plattformübergreifender und Sicherheitstests. Es deckt auch die Gewährleistung der plattformübergreifenden Kompatibilität ab und empfiehlt Tools wie JES

Wie können Sie die Größe Ihres UNIAPP -Anwendungspakets reduzieren? Wie können Sie die Größe Ihres UNIAPP -Anwendungspakets reduzieren? Mar 27, 2025 pm 04:45 PM

In dem Artikel werden Strategien zur Reduzierung der UNIAPP -Paketgröße erörtert, wobei der Schwerpunkt auf Codeoptimierung, Ressourcenmanagement und Techniken wie Codeaufteilung und faulen Laden liegt.

Welche Debugging -Tools stehen für die UNIAPP -Entwicklung zur Verfügung? Welche Debugging -Tools stehen für die UNIAPP -Entwicklung zur Verfügung? Mar 27, 2025 pm 05:05 PM

In dem Artikel werden Debugging -Tools und Best Practices für die UniApp -Entwicklung erörtert und sich auf Tools wie Hbuilderx, Wechat -Entwickler -Tools und Chrome Devtools konzentriert.

Wie verwende ich die API von Uni-App zum Zugriff auf Gerätefunktionen (Kamera, Geolokalisierung usw.)? Wie verwende ich die API von Uni-App zum Zugriff auf Gerätefunktionen (Kamera, Geolokalisierung usw.)? Mar 18, 2025 pm 12:06 PM

In dem Artikel werden die APIs von UNI-Apps zum Zugriff auf Gerätefunktionen wie Kamera und Geolokalisierung beschrieben, einschließlich Berechtigungseinstellungen und Fehlerbehandlung.

Wie verwende ich die Speicher-API von Uni-App (Uni.setStorage, Uni.getStorage)? Wie verwende ich die Speicher-API von Uni-App (Uni.setStorage, Uni.getStorage)? Mar 18, 2025 pm 12:22 PM

In dem Artikel wird erläutert, wie die Speicher-APIs von UNI-Apps (Uni.setStorage, Uni.getStorage) für lokales Datenmanagement verwendet werden, Best Practices, Fehlerbehebung erörtert und Einschränkungen und Überlegungen für die effektive Verwendung hervorgehoben werden.

Wie gehe ich mit der Navigation zwischen den Seiten in UNI-App um? Wie gehe ich mit der Navigation zwischen den Seiten in UNI-App um? Mar 18, 2025 pm 12:07 PM

In dem Artikel werden die Handhabungspannennavigation in Uni-App unter Verwendung integrierter APIs, Best Practices für effiziente Navigation, benutzerdefinierte Animationen für Seitenübergänge und Methoden zum Übergeben von Daten zwischen den Seiten erörtert.

See all articles