Home  >  Article  >  Web Front-end  >  How to get the dom height in uniapp is inaccurate

How to get the dom height in uniapp is inaccurate

PHPz
PHPzOriginal
2023-04-27 09:08:022674browse

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>

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()
}

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;
}

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()
}

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;
}

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:
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