序文人気の株式リストは 4,000 種類以上あり、取引中にページにレンダリングしてリアルタイムで更新する必要があります。インターフェイスとページングを使用すると、数十ページをスクロールダウンするとページがどんどん固まってしまい、リアルタイムで更新する必要があります。最終的なアプローチは、最初に ws からデータを渡すことです。開始と終了の添え字を渡すだけで、ページ上にいくつかのタグを生成するだけです。レンダリングの負担を大幅に軽減します。 仮想リストとは何ですか?これは、表示領域にラベルをレンダリングし、スクロール時にビューを更新するために開始と終了の添え字を常に切り替え、同時にオフセットを計算することだけを指します。 デモ効果準備
スクリーンの高さとボックスの高さアプレットでは、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を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: div の水平レイアウトを両側に揃える 3 つの方法
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
MySQL のCAST()およびCONVERT()関数を使用すると、ある型の値を取得し、別の型の値を...
導入MySQL は、私たちが日常業務で使用する非常に一般的なデータベースです。MySQL は現在 O...
最近、Mac システムを使用して、ローカル Web サーバー環境を構築する準備をしていました。 Ma...
ネットワーク セキュリティは非常に重要なトピックであり、サーバーはネットワーク セキュリティにおける...
Ubuntu 18.04、その他のバージョンのUbuntu質問: sudo apt-get ins...
1. 問題の出現フラット リストを作成しました。リストの一部には、マウスをホバーすると表示されるポッ...
ウェブサイトの解析を高速化するために、動的ページと静的ページを異なるサーバーで解析して、解析速度を向...
遅いログクエリ機能スロー ログ クエリの主な機能は、設定された時間しきい値を超える SQL ステート...
この記事では、マウスをドラッグしてdivのサイズを調整するJavaScriptの具体的なコードを参考...
1. MySQL 8.0.12 バージョンのインストール手順。 1. ダウンロードhttps://d...
MySQL は次の 3 種類のコメントをサポートしています。 1. 行末の「#」文字から。 2. 「...
負荷分散を理解するには、まずフォワード プロキシとリバース プロキシを理解する必要があります。注記:...
セルの背景画像を設定でき、任意の GIF または JPEG 画像ファイルを使用できます。基本的な構文...
たとえば、スクリーン リーダー ソフトウェアを必要とするユーザーなどです。フロントエンド開発者として...