ホームページ ウェブフロントエンド uni-app ループを使用して幅を決定し、uniapp で幅を変更する方法

ループを使用して幅を決定し、uniapp で幅を変更する方法

Apr 18, 2023 pm 02:09 PM

モバイル アプリケーションの人気に伴い、開発者は多くの便利な開発ツールやフレームワークを提供しています。UniApp は、開発者が同じコードを使用して複数のプラットフォームでアプリケーションを構築できるようにするクロスプラットフォーム フレームワークです。 UniApp では、レイアウトやスタイルの問題に対処する必要があることがよくありますが、幅の決定と幅の変更をループする方法はよくある問題の 1 つです。

まず要件を明確にする必要があります。私たちが実現したいのは、幅が等しくない複数のサブ要素をコンテナ内に配置することです。すべてのサブ要素の幅の合計が より小さい場合コンテナの幅、子要素の幅はコンテナの幅を均等に分割し、各子要素の幅が指定された値以上である必要があります。幅の合計がコンテナの幅より大きい場合は、コンテナーに合わせて、各子要素の幅を比例的に縮小する必要があります。

次に、Vue の v-for 命令を使用して子要素をループでレンダリングしながら、子要素の幅を格納する変数を定義し、実際の状況に応じてその値を変更することを検討します。コードは次のとおりです。

<template>
  <view class="container">
    <view class="item"
          v-for="(item, index) in itemList"
          :key="index"
          :style="&#39;width: &#39; + itemWidth[index] + &#39;px;&#39;">
      {{ 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 は、モバイル アプリケーション開発のさまざまな問題を解決するための多くの便利なツールとコンポーネントを提供する強力なフレームワークです。レイアウトとスタイルの問題に対処する場合、ループを使用して幅を決定し、幅を変更することは、必要なレイアウト効果を迅速に構築するのに役立つ非常に効果的で実用的な方法です。

以上がループを使用して幅を決定し、uniapp で幅を変更する方法の詳細内容です。詳細については、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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

UNIAPPアプリケーションで実行できるさまざまなタイプのテストは何ですか? UNIAPPアプリケーションで実行できるさまざまなタイプのテストは何ですか? Mar 27, 2025 pm 04:59 PM

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

Uniappアプリケーションパッケージのサイズをどのように削減できますか? Uniappアプリケーションパッケージのサイズをどのように削減できますか? Mar 27, 2025 pm 04:45 PM

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

UNIAPP開発に利用できるデバッグツールは何ですか? UNIAPP開発に利用できるデバッグツールは何ですか? Mar 27, 2025 pm 05:05 PM

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

怠zyなロードを使用してパフォーマンスを向上させるにはどうすればよいですか? 怠zyなロードを使用してパフォーマンスを向上させるにはどうすればよいですか? Mar 27, 2025 pm 04:47 PM

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

UniappのWebパフォーマンスのために画像を最適化するにはどうすればよいですか? UniappのWebパフォーマンスのために画像を最適化するにはどうすればよいですか? Mar 27, 2025 pm 04:50 PM

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

Uniappで複雑なデータ構造を管理するための一般的なパターンは何ですか? Uniappで複雑なデータ構造を管理するための一般的なパターンは何ですか? Mar 25, 2025 pm 02:31 PM

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

Uniappはグローバルな構成とスタイリングをどのように処理しますか? Uniappはグローバルな構成とスタイリングをどのように処理しますか? Mar 25, 2025 pm 02:20 PM

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

Uniappの計算プロパティとは何ですか?それらはどのように使用されていますか? Uniappの計算プロパティとは何ですか?それらはどのように使用されていますか? Mar 25, 2025 pm 02:23 PM

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

See all articles