uniapp アプレットでウォーターフォール フロー レイアウトを実装するためのアイデアとコード

uniapp アプレットでウォーターフォール フロー レイアウトを実装するためのアイデアとコード

1. はじめに

今、ウォーターフォールフローについて書くことは、古い内容の焼き直しと見なされますか?

気にしない、私は書くつもりだし、誰も私を止めることはできない。

ウォーターフォール フローは非常に一般的なレイアウト方法とみなされ、全体的な考え方は理解しやすいですが、ミニ プログラムでは考慮する必要がある他のいくつかの問題が実際にあります。

質問1: uniapp は Vue ベースなので、DOM を直接操作するのは簡単ではありません。

質問2: UniappはVueをベースにしていますが、いくつかの変更が加えられているため、refを使用して操作するのは簡単ではありません。

まずアイデアについて話しましょう

記事の長さを確保し、一部の友人がウォーターフォールフローの基本的な考え方にあまり精通していないため、最初にウォーターフォールフローの考え方について説明しましょう。下の図を見てみましょう。

商品画像の高さが不揃いで、商品タイトルの行数も不揃いなため、最終的にずらした配置になっていることがわかります。

以前、開発過程で CSS Flex レイアウトと列レイアウトを使用して実現しようとしたこともありましたが、かろうじて同じ効果を得ることができましたが、最終的にはバックエンドに接続するときに製品の人気度を優先する必要があったため、断念せざるを得ませんでした。

Flex 実装の欠点: Flex レイアウトを使用すると、製品を挿入する高さを正確に計算できません。

列実装の欠点: 列レイアウトを使用する場合、シーケンスを操作するのは簡単ではありません。

PS: 商品の並べ替えが必要ない場合は、純粋な CSS 実装を検討できます。ここでは詳細には触れませんが、Nuggets には多くの実装があります。

3. コアコード

タイトルの通り、この記事のウォーターフォールフローの実装は uniapp が開発したミニプログラムに基づいています。ネイティブ JS 実装を期待する場合は、この記事の多くのアイデアを変更する必要があります。
まずいくつかの質問に答えさせてください:

列の高さは $refs を通じて取得できないため、コードは最初に Image タグの @load 時間を通じて画像を 1 回読み込み、画像の幅、高さ、およびその他の情報をメソッドに渡します。

// コンポーネント/ウォーターフォール.vue
<テンプレート>
    <view class="ウォーターフォール">
        <非表示を表示>
            // JS ネイティブ実装を使用する場合、for ループを直接使用して挿入し、列の高さを取得できます // ここでは、メソッドは画像をロードすることによって呼び出されます。デフォルトのパラメータは画像情報を運び、画像の高さを取得できます <block v-for(item in imgList" :key="item.id">
                <画像:src="item.url" @load="loadImg" ></iamge>
            </ブロック>
        </ビュー>
        <view class="list" v-for="(list, key) ウォーターフォール内" :key="key">
            <navigator url="https://www.baidu.com" v-for="list.list 内の項目" :key="item.id">
                <画像:src="item.url" mode="widthFix"></画像>
                <view class="shop-info">
                    /*タイトルおよびその他の情報は省略*/
                </ビュー>
            </ナビゲーター>
        </ビュー>
    </ビュー>
</テンプレート>

<スクリプト>
    エクスポートデフォルト{
        // 別個のコンポーネントとして抽出されるため、データは親コンポーネントから取得されるか、現在のコンポーネントが API を要求します
        プロパティ: { imgList: 配列 },
        データ(){
            戻る {
                lists: [], // 操作を簡単にするためにimgListをバックアップするために使用される配列waterfall: [
                    // 現在の列の高さを記録するために使用されます。プルアップして新しいデータを取得するために使用できるように、メソッドには保存されません。 // デフォルトの携帯電話の表示は 2 列に固定できるためです。 // コンピューター上でアダプティブまたはマルチカラムである場合は、複数の列を動的に挿入できます。
                        高さ: 0, 
                        リスト: []
                    },{
                        高さ: 0, 
                        リスト: []
                    }
                ]
            }
        },
        作成された(){
            this.lists = this.imgList; // Vue はデータを作成し、すぐにバックアップします},
        時計(){
            // データ ソースをリッスンします。新しい値が渡された場合は、リスト配列でバックアップします。imgList(data){ data.length && this.lists.push(...data); }
        },
        メソッド: {
            読み込み画像(ev){
                Root = this.waterfall; とします。
                高さを e.detail.height とします。
                //現在の高さに基づいて新しいデータが誰に渡されるかを判断し、列の高さを更新します。最初に左側を挿入します if (Root[0].height <= Root[1].height){
                    // ヒート優先度の問題を考慮して、shift() メソッドを使用してヘッダー データをプッシュします。
                    ルート[0].list.push(this.lists.shift())
                    ルート[0].height += 高さ;
                } それ以外 {
                    ルート[1].list.push(this.lists.shift())
                    ルート[1].height += height;
                }
            }
        }
    }
</スクリプト>

この時点で、コアコードは完成です。

PS: このメソッドは画像の @load イベントによってトリガーされるため、大規模な読み込みはパフォーマンスに影響を及ぼします。そのため、自分でトレードオフを行う必要があります。

IV. 結論

この記事を読んでこの方法を使うことに決めた人は、この書き方はパフォーマンスの問題に影響を及ぼす可能性があるということを覚えておいて、この側面を徹底的に研究するよう努力してほしいと思います。

これで、uniapp アプレットのウォーターフォール フロー レイアウトを実装するためのアイデアとコードに関するこの記事は終了です。uniapp アプレットのウォーターフォール フロー レイアウトに関する関連コンテンツの詳細については、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • WeChatアプレットはウォーターフォールフローのページングスクロール読み込みを実装します
  • ミニプログラムのウォーターフォールフローコンポーネントは、ページめくりと画像の遅延読み込みを実現します。
  • ミニプログラムでシンプルな2列のウォーターフォール効果を実装する
  • WeChatアプレットはjsを通じてウォーターフォールフローレイアウトを実装します
  • ウェブページとWeChatアプレットページにウォーターフォール効果を実装する
  • WeChatアプレットでウォーターフォールレイアウトと無限読み込みを実装する方法の詳細な説明
  • WeChat ミニプログラムで切り捨てられたウォーターフォール コンポーネントを実装するためのサンプル コード

<<:  MySQL 5.7.19 のインストールと設定方法のグラフィック チュートリアル (win10)

>>:  Centos6.5 で MySQL 5.7.19 をインストールして設定する方法

推薦する

CSSのborder-radiusプロパティを使用して円弧を設定します

現象: divを一定の振幅で円、楕円などに変更する方法: CSSのborder-radiusプロパテ...

Docker で MySQL をデプロイする詳細なプロセス (Docker でデプロイされる一般的なアプリケーション)

以前にも紹介しました: docker (一般的なアプリケーションのデプロイ): docker dep...

Linux ディスクデバイスと LVM 管理コマンドの詳細な例

序文Linux オペレーティング システムでは、デバイス ファイルは特別なタイプのファイルです。これ...

MAC+PyCharm+Flask+Vue.js ビルドシステム

目次node.js+nvm+npm を設定するnpmスイッチタオバオミラーVue.jsをインストール...

Linux で SpringBoot jar プログラム デプロイメント シェル スクリプトを起動および停止する方法

では早速、コードをお見せしましょう。具体的なコードは次のとおりです。 #!/bin/bash cd ...

MySQLの3値ロジックとNULLの詳細な説明

目次NULLとは何か2種類のNULLなぜ「= NULL」ではなく「IS NULL」と書く必要があるの...

Quickjs は JavaScript サンドボックスの詳細をカプセル化します

目次1. シナリオ2. 基盤となるAPIを簡素化する2.1 自動的に破棄を呼び出す2.2 VM値を作...

SCSS スタイルのコードを 50% 削減する 14 の実践的な経験

序文Sass は CSS3 言語の拡張機能です。Sass を使用すると、より良いスタイルシートをより...

CSS3はテキストのレリーフ効果、彫刻効果、炎のテキストを実現します

この効果を実現するには、まず CSS のプロパティを知っておく必要があります。 text-shado...

ログインと登録機能を実現するjs

この記事の例では、ログインと登録機能を実装するためのjsの具体的なコードを参考までに共有しています。...

ネイティブJavaScriptでカルーセルを実装する

この記事では、JavaScriptでカルーセルを実装するための具体的なコードを参考までに紹介します。...

Linux サーバー上で nvidia-docker 環境を設定するプロセスの詳細な説明

Docker はコンテナに相当し、必要な動作環境に応じて対応する動作環境を構築できます。このとき、各...

JavaScript キャンバスはマウスの動きに合わせてボールを動かすことを実装します

この記事の例では、マウスに従ってボールを動かすjsの具体的なコードを参考までに共有しています。具体的...

フレックスレイアウトではサブアイテムの高さを維持できる

Flex レイアウトを使用すると、水平に配置すると、すべての子項目の高さが同じになることがわかります...

JavaScript 関数はランダムな色の検証コードをカプセル化します (完全なコード)

数字、文字、またはランダムな色の数字と文字の混合で構成される n 桁の確認コード。以下に完全なコード...