Home Web Front-end uni-app How to get the dom height in uniapp is inaccurate

How to get the dom height in uniapp is inaccurate

Apr 27, 2023 am 09:08 AM

Preface

In the process of developing small programs using uniapp, we often encounter situations where we need to obtain the height of DOM elements. However, sometimes we find that the height obtained through uni.createSelectorQuery().select().boundingClientRect() is not accurate. So how did this situation arise? How to solve it? This article will explain it to you in detail.

The problem occurs

First, let’s reproduce the problem. For example, in the simple template below, we need to get the height of the child element content.

<template>
  <view class="container">
    <view class="content" ref="content">内容区域</view>
  </view>
</template>
Copy after login

We can get the height of the content element in the following way:

mounted() {
  uni.createSelectorQuery().in(this).select('.content').boundingClientRect(rect => {
    console.log(rect.height)
  }).exec()
}
Copy after login

So we can see the height of content in the console .

However, when we add some styles to the content element, such as:

.content {
  margin: 10px; 
  padding: 20px;
}
Copy after login

Run the program again, we will find that the height of the console output is the height we expected. Inconsistent and slightly less than we expected. This is the problem of "inaccurate acquisition of DOM height" that we often encounter.

Cause Analysis

So, what is the cause of the problem? After reviewing the information, we can learn the following reasons:

1. Using this style alone will cause height calculation errors and produce white edges.

2. This is because margin and padding occupy different spaces for elements. margin does not occupy space, but padding takes up space.

Since boundingClientRect is affected by padding and border, but margin is not affected, so in boundingClientRect will reduce the height of padding when obtaining the height.

Solution

Now that we have grasped the cause of the problem, the solution is ready to come out. We can solve this problem through the following methods:

1. Get the height of the parent element through uni.createSelectorQuery().exec(), and then get it through getComputedStyle The padding and border of the child element are used to calculate the actual height of the child element.

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()
}
Copy after login

2. Solve the problem by adding the box-sizing:border-box style to both the child element and the parent element.

.container,
.content {
  box-sizing: border-box;
  margin: 10px;
  padding: 20px;
}
Copy after login

We need to pay attention to two points here:

(1) box-sizing The style needs to be added to two elements.

(2) It is necessary to pay attention to whether the interval between the child element and the parent element is incorrect.

Conclusion

Through the above methods, we can solve the problem of high inaccuracy in obtaining DOM by uniapp. Please choose to use it according to your specific situation. I hope this article can be helpful to you.

The above is the detailed content of How to get the dom height in uniapp is inaccurate. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How do I handle local storage in uni-app? How do I handle local storage in uni-app? Mar 11, 2025 pm 07:12 PM

This article details uni-app's local storage APIs (uni.setStorageSync(), uni.getStorageSync(), and their async counterparts), emphasizing best practices like using descriptive keys, limiting data size, and handling JSON parsing. It stresses that lo

How do I manage state in uni-app using Vuex or Pinia? How do I manage state in uni-app using Vuex or Pinia? Mar 11, 2025 pm 07:08 PM

This article compares Vuex and Pinia for state management in uni-app. It details their features, implementation, and best practices, highlighting Pinia's simplicity versus Vuex's structure. The choice depends on project complexity, with Pinia suita

How do I make API requests and handle data in uni-app? How do I make API requests and handle data in uni-app? Mar 11, 2025 pm 07:09 PM

This article details making and securing API requests within uni-app using uni.request or Axios. It covers handling JSON responses, best security practices (HTTPS, authentication, input validation), troubleshooting failures (network issues, CORS, s

How do I use uni-app's geolocation APIs? How do I use uni-app's geolocation APIs? Mar 11, 2025 pm 07:14 PM

This article details uni-app's geolocation APIs, focusing on uni.getLocation(). It addresses common pitfalls like incorrect coordinate systems (gcj02 vs. wgs84) and permission issues. Improving location accuracy via averaging readings and handling

How do I use uni-app's social sharing APIs? How do I use uni-app's social sharing APIs? Mar 13, 2025 pm 06:30 PM

The article details how to integrate social sharing into uni-app projects using uni.share API, covering setup, configuration, and testing across platforms like WeChat and Weibo.

How do I use uni-app's easycom feature for automatic component registration? How do I use uni-app's easycom feature for automatic component registration? Mar 11, 2025 pm 07:11 PM

This article explains uni-app's easycom feature, automating component registration. It details configuration, including autoscan and custom component mapping, highlighting benefits like reduced boilerplate, improved speed, and enhanced readability.

How do I use preprocessors (Sass, Less) with uni-app? How do I use preprocessors (Sass, Less) with uni-app? Mar 18, 2025 pm 12:20 PM

Article discusses using Sass and Less preprocessors in uni-app, detailing setup, benefits, and dual usage. Main focus is on configuration and advantages.[159 characters]

How do I use uni-app's uni.request API for making HTTP requests? How do I use uni-app's uni.request API for making HTTP requests? Mar 11, 2025 pm 07:13 PM

This article details uni.request API in uni-app for making HTTP requests. It covers basic usage, advanced options (methods, headers, data types), robust error handling techniques (fail callbacks, status code checks), and integration with authenticat

See all articles