WeChatアプレット仮想リストの応用例

WeChatアプレット仮想リストの応用例

序文

人気の株式リストは 4,000 種類以上あり、取引中にページにレンダリングしてリアルタイムで更新する必要があります。インターフェイスとページングを使用すると、数十ページをスクロールダウンするとページがどんどん固まってしまい、リアルタイムで更新する必要があります。最終的なアプローチは、最初に ws からデータを渡すことです。開始と終了の添え字を渡すだけで、ページ上にいくつかのタグを生成するだけです。レンダリングの負担を大幅に軽減します。

仮想リストとは何ですか?

これは、表示領域にラベルをレンダリングし、スクロール時にビューを更新するために開始と終了の添え字を常に切り替え、同時にオフセットを計算することだけを指します。

デモ効果

準備

  • 1 つの画面に表示できるリストの数を計算します。
  • ボックスの高さ。
  • スクロールの開始位置。
  • スクロールの終了位置。
  • スクロールのオフセット。

スクリーンの高さとボックスの高さ

アプレットでは、wx.createSelectorQuery を使用して画面の高さとボックスの高さを取得できます。

getEleInfo(ele) {
    新しい Promise を返します ( 解決、拒否 ) => {
        const クエリ = wx.createSelectorQuery().in(this);
        クエリを選択します(ele).boundingClientRect();
        クエリ.selectViewport().scrollOffset();
        クエリ.exec( res => {
            解決する(res);
        })
    })
},

this.getEleInfo('.stock').then( res => {
    (!res[0]) の場合、戻り値:
    // 画面の高さ this.screenHeight = res[1].scrollHeight;
    //ボックスの高さ this.boxhigh = res[0].height;
})

開始と終了とオフセット

onPageScroll(e) {
    scrollTop を e とします。
    this.start = Math.floor(scrollTop / this.boxhigh);
    this.end = this.start + this.visibleCount;
    this.offsetY = this.start * this.boxhigh; 
}

scrollTopは、上から何ボックススクロールされたか / ボックスの高さ = 開始下付き文字として理解できます。

開始 + ページの表示領域に表示できるボックスの数 = 終了

開始 * ボックスの高さ = オフセット

計算: {
    可視データ() {
        this.data.slice(this.start, Math.min(this.end, this.data.length)) を返します
    },
}

start と end が変更された場合は、slice(this.start, this.end) を使用してデータを変更し、ラベルの内容を時間内に置き換えることができるようにします。

最適化

素早くスクロールすると、データがまだ読み込まれていないため、下部に空白領域が表示されます。スライド時にデータがタイムリーに読み込まれるように、3 つの画面をレンダリングできます。

前カウント() {
    Math.min(this.start, this.visibleCount) を返します。
},
次のカウント() {
    Math.min(this.visibleCount、this.data.length - this.end) を返します。
},
可視データ() {
    start = this.start - this.prevCount とします。
        終了 = this.end + this.nextCount;
    this.data.slice(start, Math.min(end, this.data.length)) を返します。
},

フロントスクリーンの予約オフセットを計算した場合は、次のように変更する必要があります: this.offsetY = this.start * this.boxhigh - this.boxhigh * this.prevCount

スライドすると、開始、終了、および offsetY が常に変化します。setData を頻繁に呼び出すと、アプレットがメモリを超過してクラッシュする可能性があります。ここでは、スライド時にスロットルを調整して、setData の実行頻度を減らします。

    マウント() {
        this.deliquate = this.throttle(this.changeDeliquate, 130)
    },
    メソッド: {
        スロットル(fn, 時間) {
            var 前 = 0;
            関数(scrollTop)を返す{
                now = Date.now() とします。
                if ( 現在 - 前回 > 時刻 ) {
                    fn(スクロールトップ)
                    前 = 今;
                }
            }
        },
        changeDeliquate(スクロールトップ) {
            this.start = Math.floor(scrollTop / this.boxhigh);
            this.end = this.start + this.visibleCount;
            this.offsetY = this.start * this.boxhigh; 
            console.log('setData を実行')
        }
    },
    onPageScroll(e) {
	scrollTop を e とします。
        console.log('スクロール ==================>>>>>>>')
        this.deliquate(スクロールトップ);
    }

上の図からわかるように、スクロールするたびに setData の書き込みが少なくとも 2 倍削減されます。

記事に書かれたデモはここにありますので、必要な場合は参照してください。

要約する

WeChatミニプログラム仮想リストアプリケーションに関するこの記事はこれで終わりです。より関連性の高いミニプログラム仮想リストコンテンツについては、123WORDPRESS.COMで以前の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • WeChatミニプログラムでの仮想リストの実装例

<<:  div の水平レイアウトを両側に揃える 3 つの方法

>>:  Centos7 での DNS サーバーの構築の概要

推薦する

Nginx で同じドメイン名を持つ複数のプロジェクトを構成する方法

Nginx を使用して同じドメイン名で複数のプロジェクトを構成するには、次の 2 つの方法があります...

MySQL のデータ型とフィールド属性の原理と使用法の詳細な説明

この記事では、MySQL のデータ型とフィールド属性について説明します。ご参考までに、詳細は以下の通...

MySQLの通常インデックスとユニークインデックスの違いの詳しい説明

目次1 概念上の区別2 事例紹介3 クエリパフォーマンス4 アップデートのパフォーマンス4.1 記憶...

Win32 MySQL 5.7.27 のインストールと設定方法のグラフィックチュートリアル

MySQL 5.7.27のインストールチュートリアルは以下のように記録され、皆さんと共有されています...

HTML、CSS、RSSフィードが正しいかどうかを確認する無料ツール

この種のエラーに対処するための 1 つの方法は、まずマークアップとスタイルシートを検証することです。...

カレンダー効果を実現するための Bootstrap+JQuery

この記事では、カレンダー効果を実現するためのBootstrap+Jqueryの具体的なコードを参考ま...

HTML 名 ID とクラスの違い_PowerNode Java アカデミー

名前タグの名前を指定します。形式 <input type="text" n...

Ubuntu での CUDA と CUDNN のインストールとアンインストールの実装

目次序文グラフィックドライバーをインストールするCUDAをアンインストールするCUDAをインストール...

Linuxシステムはルートアカウントのリモートログインコマンドを禁止しています

ps: Linux システムで root アカウントのリモート ログインを無効にする方法は次のとおり...

IE、Firefox、Chromeブラウザではスペースの表示が異なります

&nbsp;&nbsp;IE、Firefox、Chrome ブラウザでの表示効果は、...

mysql 5.7.11 winx64 初期パスワード変更

公式サイトからMySQL-5.7.11-winx64の圧縮版をダウンロード。インストール後、パスワー...

Windows Server 2016 に MySQL 5.7.19 の解凍バージョンをインストールするための詳細なチュートリアル

MySQL 5.7.19 winx64 解凍版のインストールチュートリアルを収録しています。具体的な...

Docker インストール Nginx チュートリアル 実装図

Nginx をインストールして試してみましょう。画像はクラスであり、コンテナはオブジェクトであること...

HTML テーブルの空白セル補完を実装する方法

私が初めて Web 開発を独学で学んだ頃は、いわゆる DIV/CSS レイアウトはなく、テーブル レ...

MySQL データベースでよく使用される SQL ステートメントの詳細と概要

この記事では、MySQL データベースでよく使用される SQL ステートメントを例を使用して説明しま...