ループを使用して幅を決定し、uniapp で幅を変更する方法
モバイル アプリケーションの人気に伴い、開発者は多くの便利な開発ツールやフレームワークを提供しています。UniApp は、開発者が同じコードを使用して複数のプラットフォームでアプリケーションを構築できるようにするクロスプラットフォーム フレームワークです。 UniApp では、レイアウトやスタイルの問題に対処する必要があることがよくありますが、幅の決定と幅の変更をループする方法はよくある問題の 1 つです。
まず要件を明確にする必要があります。私たちが実現したいのは、幅が等しくない複数のサブ要素をコンテナ内に配置することです。すべてのサブ要素の幅の合計が より小さい場合コンテナの幅、子要素の幅はコンテナの幅を均等に分割し、各子要素の幅が指定された値以上である必要があります。幅の合計がコンテナの幅より大きい場合は、コンテナーに合わせて、各子要素の幅を比例的に縮小する必要があります。
次に、Vue の v-for 命令を使用して子要素をループでレンダリングしながら、子要素の幅を格納する変数を定義し、実際の状況に応じてその値を変更することを検討します。コードは次のとおりです。
<template> <view class="container"> <view class="item" v-for="(item, index) in itemList" :key="index" :style="'width: ' + itemWidth[index] + 'px;'"> {{ item }} </view> </view> </template> <script> export default { data() { return { itemList: ['Apple', 'Banana', 'Cherry', 'Grape', 'Orange'], containerWidth: 100, // 容器宽度 itemWidth: [], // 子元素宽度 minItemWidth: 30 // 子元素最小宽度 } }, mounted() { this.calculateWidth() }, methods: { calculateWidth() { const totalWidth = this.itemList.reduce((pre, cur) => { return pre + this.calculateTextWidth(cur) }, 0) if (totalWidth < this.containerWidth) { // 宽度不足,均分 const width = Math.floor(this.containerWidth / this.itemList.length) this.itemWidth = this.itemList.map(() => width) } else { // 宽度过多,按比例缩小 let availableWidth = this.containerWidth const result = this.itemList.reduce((pre, cur) => { const curWidth = this.calculateTextWidth(cur) const minCurWidth = Math.min(curWidth, this.minItemWidth) const ratio = curWidth / minCurWidth pre.push({ originalWidth: curWidth, availableWidth: Math.floor(availableWidth / ratio), ratio: ratio }) availableWidth -= Math.floor(availableWidth / ratio) return pre }, []) this.itemWidth = result.map(item => { return Math.max(item.availableWidth / item.ratio, this.minItemWidth) }) } }, calculateTextWidth(text) { // 通过uni.createSelectorQuery获取元素实际宽度 return uni.createSelectorQuery().select('.text-measure') .boundingClientRect(rect => { return rect.width }).exec() } } } </script> <style> .container { display: flex; flex-wrap: wrap; } .item { display: flex; justify-content: center; align-items: center; padding: 5px; } .text-measure { visibility: hidden; position: absolute; left: -9999px; } </style>
上記のコードの実装の考え方は、最初にサブ要素の幅の合計とコンテナーの幅の関係を計算し、次にそれが必要かどうかを判断することです。子要素の幅を等しくするか、実際の状況に基づいて比例的に縮小し、最後に計算された子要素の幅が itemWidth
変数と v-for
ディレクティブに割り当てられます。子要素をレンダリングするためにテンプレートで使用されます。
なお、テキスト幅を計算するには、実際に計測するための text-measure
クラスの要素を定義し、uni.createSelectorQuery# を使用する必要があります。 ## 要素の実際の幅を取得します。
以上がループを使用して幅を決定し、uniapp で幅を変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









この記事では、ユニット、統合、機能、UI/UX、パフォーマンス、クロスプラットフォーム、セキュリティテストなど、UNIAPPアプリケーションのさまざまなテストタイプについて説明します。また、クロスプラットフォームの互換性を確保し、JESのようなツールを推奨しています

この記事では、コードの最適化、リソース管理、コード分割や怠zyなロードなどの手法に焦点を当てたUniappパッケージサイズを削減する戦略について説明します。

この記事では、Hbuilderx、Wechat開発者ツール、Chrome Devtoolsなどのツールに焦点を当てたUniapp開発のためのデバッグツールとベストプラクティスについて説明します。

怠zyな読み込みは、サイトのパフォーマンスを改善し、負荷時間とデータの使用量を削減するための非批判的なリソースを扱います。重要なプラクティスには、重要なコンテンツの優先順位付けや効率的なAPIの使用が含まれます。

この記事では、圧縮、レスポンシブデザイン、怠zyなロード、キャッシング、およびWebP形式の使用を通じて、Webパフォーマンスを向上させるために、Uniappの画像の最適化について説明します。

この記事では、Uniappの複雑なデータ構造の管理について説明し、Singleton、Observer、Factory、Stateなどのパターンに焦点を当て、VuexおよびVue 3 Composition APIを使用してデータ状態の変更を処理するための戦略について説明します。

Uniappは、Manifest.jsonを介してグローバル構成を管理し、app.vueまたはapp.scssを介してスタイリングを管理し、変数とミキシンにuni.scssを使用します。ベストプラクティスには、SCS、モジュラースタイル、レスポンシブデザインの使用が含まれます。

Vue.jsから派生したUniappの計算プロパティは、リアクティブで再利用可能な、最適化されたデータ処理を提供することにより、開発を強化します。依存関係が変更されたときに自動的に更新され、パフォーマンスの利点を提供し、国家管理を簡素化します
