uniapp で dom の高さを取得する方法が不正確です
はじめに
uniappを使用して小さなプログラムを開発する過程で、DOM要素の高さを取得する必要がある状況によく遭遇します。ただし、uni.createSelectorQuery().select().boundingClientRect() によって取得された高さが正確ではない場合があります。では、なぜこのような状況が生じたのでしょうか?どうやって解決すればいいでしょうか?この記事ではそれについて詳しく説明します。
問題が発生します
まず、問題を再現しましょう。たとえば、以下の単純なテンプレートでは、子要素 content
の高さを取得する必要があります。
<template> <view class="container"> <view class="content" ref="content">内容区域</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; }
ここでは 2 つの点に注意する必要があります。
(1) box-sizing
スタイルを 2 つの要素に追加する必要があります。
(2) 子要素と親要素の間隔が間違っていないか注意が必要です。
結論
上記の方法により、uniapp による DOM 取得の精度が高いという問題を解決できます。ご自身の状況に合わせてご利用ください。
以上がuniapp で dom の高さを取得する方法が不正確ですの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

この記事では、Uni-AppのローカルストレージAPI(uni.setstoragesync()、uni.getStoragesync()、およびそれらの非同期のカウンターパート)を詳しく説明し、説明キーの使用、データサイズの制限、JSONの解析の処理などのベストプラクティスを強調しています。 それはそのloを強調します

この記事では、uni.requestまたはaxiosを使用してUni-app内でAPIリクエストの作成と保護を詳しく説明しています。 JSON応答の処理、最高のセキュリティプラクティス(HTTPS、認証、入力検証)、トラブルシューティング障害(ネットワークの問題、CORS、S

この記事では、Uni.getLocation()に焦点を当てたUni-AppのGeolocation APIを詳しく説明しています。 誤った座標系(GCJ02対WGS84)や許可の問題などの一般的な落とし穴に対処します。 読み取りと取り扱いを平均化することにより、位置の精度を向上させます

この記事では、UNI-APPの州管理についてVuexとPiniaを比較します。 それらの機能、実装、およびベストプラクティスを詳細に説明し、ピンアのシンプルさとvuexの構造を強調しています。 選択は、Pinia sutaを使用して、プロジェクトの複雑さに依存します

この記事では、ソーシャル共有をUni.share APIを使用してUni-Appプロジェクトに統合し、WeChatやWeiboなどのプラットフォーム全体でセットアップ、構成、テストをカバーする方法を詳しく説明しています。

この記事では、UNI-APPのEasyCom機能を説明し、コンポーネント登録を自動化します。 Autoscanやカスタムコンポーネントマッピングなどの構成の詳細は、ボイラープレートの削減、速度の向上、読みやすさの向上などの利点を強調しています。

記事では、UNI-APPでSASSおよびPREPROCESSORSを使用して、セットアップ、利点、および二重使用法を詳細に使用することについて説明します。主な焦点は構成と利点にあります。[159文字]

この記事では、HTTPリクエストを作成するためにUNI-APPのUni.Request APIを詳しく説明しています。 基本的な使用状況、高度なオプション(メソッド、ヘッダー、データ型)、堅牢なエラー処理手法(失敗コールバック、ステータスコードチェック)、およびAuthenticATとの統合をカバーしています
