検索
ホームページウェブフロントエンドuni-appuniapp で dom の高さを取得する方法が不正確です

はじめに

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. これは、marginpadding が要素の異なるスペースを占有するためです。margin はスペースを占有しませんが、padding はスペースを占有します。

boundingClientRectpaddingborder の影響を受けますが、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()
}

2. box-sizing:border-box スタイルを子要素と親要素の両方に追加して、問題を解決します。

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

ここでは 2 つの点に注意する必要があります。

(1) box-sizing スタイルを 2 つの要素に追加する必要があります。

(2) 子要素と親要素の間隔が間違っていないか注意が必要です。

結論

上記の方法により、uniapp による DOM 取得の精度が高いという問題を解決できます。ご自身の状況に合わせてご利用ください。

以上がuniapp で dom の高さを取得する方法が不正確ですの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター