序文テーブルをよく使用します。データ量が多い場合は直接ページ区切りで表示できますが、1 ページに多くの項目を表示する必要がある場合や、ページ区切りが不要な場合も避けられません。 このとき、表示だけであれば問題ありませんが、リストが編集可能になっていると非常に固まってしまいます。ドロップダウンボックスをクリックしても、ポップアップするまでに時間がかかります。これはユーザーの使用に大きな影響を与えます。 解決
具体的な実装読み込み時に10/20個のデータ(各行の高さ/ページ表示データの高さ、または固定値で計算可能)を取得し、スクロール時にスクロールバーを監視し、スクロール距離に基づいて表示ページのデータを計算します。 満たすべき前提条件リストの合計の高さ
ページの高さが表示されている高さしかない場合、スクロールして新しいデータを取得することはできません。 各行の高さ
スクロールオフセット
ページに表示されるデータの開始インデックスと終了インデックス
コードステップ <div class="main-inner-content"> <el-table :data="visibleData" :style="{'min-height': gradingEditor ? listHeight+'px':'100%'}" id="dataTable"> </el-table> </div> 計算: { // // リストの合計の高さ listHeight () { // tableData はインターフェースの合計データです。 return this.tableData.length * this.itemSize; }, // //オフセットに対応するスタイル getTransform() { `translate3d(0,${this.startOffset}px,0)` を返します。 }, //実際の表示リストデータを取得する visibleData () { tableBody = document.querySelector('#dataTable >.el-table__body-wrapper') とします。 if (テーブル本体) { tableBody.style.transform = this.getTransform } this.tableData.slice(this.start, Math.min(this.end, this.tableData.length)) を返します。 } }, データ() { 戻る { テーブルデータ:[], //オフセット開始オフセット: 0, //開始インデックス start: 0, //終了インデックス end: null, }; }, 方法:{ ハンドルスクロール(){ // これはスクロール ボックスです。スクロール位置がテーブルの場合は、それに応じて変更するだけです。オフセットを割り当てる場所もあります。let scrollTop = document.getElementById('main-inner-content').scrollTop; // // この時点での開始インデックス this.start = Math.floor(scrollTop / this.itemSize); this.start < 0 の場合、 this.start = 0; // //この時点での終了インデックス this.end = this.start + 10; // //この時点でのオフセット this.startOffset = scrollTop - (scrollTop % this.itemSize); this.startOffset = this.startOffset > this.itemSize ? this.startOffset - this.itemSize : 0; } }, マウントされた(){ window.addEventListener("スクロール", this.handleScroll, true); }, 破壊された() window.removeEventListener('scroll', this.handleScroll, true) // スクロールバーのスクロールイベントをクリアします} ページがスクロールすると、10 個のデータのみが読み込まれ、オフセットによってページの表示が決定されます。 質問el-table 全体の合計の高さを設定し、次に下のリスト項目のボックスのオフセットを設定します。ページを更新せずにデータを再取得する必要がある場合 (ページングなど)、データを初期化する必要があります。そうしないと、ページに以前のデータが直接表示されるか、ページが空白になります。 document.querySelector('#main-inner-content').scrollTop = 0 this.start = 0 this.startOffset = 0 this.end = this.start + 10; tableBody = document.querySelector('#dataTable >.el-table__body-wrapper') とします。 tableBody.style.transform = this.getTransform 計算と使用の便宜上、ページの各行の高さを固定し、余白を省略する方法を使用していますが、プレリリース環境を展開した後、コード -webkit-box-orient: vertical が直接消えて表示されないことがわかります。 .省略テキスト{ 単語折り返し: 単語を区切る; オーバーフロー: 非表示; テキストオーバーフロー: 省略記号; ディスプレイ: -webkit-box; -webkit-box-orient: 垂直; -webkit-line-clamp: 2; } 参照する これで、el-table の仮想リストを使用してテーブルを最適化する方法に関するこの記事は終了です。el-table の最適化に関するその他のコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL データベース設計 3 つのパラダイム例分析
この記事では、学生管理を実装するためのVueの具体的なコードを例として紹介します。具体的な内容は次の...
ザビックスZabbix ([`zæbiks]) は、WEB インターフェースに基づいて分散システム監...
コンセプト紹介: MySQL の redo ログにはトランザクションの動作が記録されることはご存じの...
この記事では、例を使用して、MySQL レプリケーションの原理と実際のアプリケーションについて説明し...
Mac で開発されたプロジェクトがあり、パッケージ npm i がインストールされており、すべて正常...
目次マップ状態マップゲッターマップミューテーションマップアクション複数のモジュールマップ状態 ...
目次1. 父から息子へ2. 息子から父へ3. ブラザーコンポーネント通信(バス) 4. ref/re...
MySQL 5.7 を新しくインストールしました。ログインすると、パスワードが間違っているというメッ...
説明するこのインターフェースを呼び出すときは、次の点に注意する必要があります。パブリック IP アド...
CSS の優先順位について話す前に、CSS とは何か、CSS が何に使用されるのかを理解する必要があ...
このロゴを .rar ファイルとしてローカルに保存し、解凍して効果を確認することができます。よりシン...
Nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバーであり、IM...
これでtransformコースは終了です。例を見てみましょう。transform transform...
テストプロジェクト: react-demo react-demo プロジェクトをサーバーにクローンし...
マスタースレーブレプリケーションモードのクラスターでは、通常、1 つのマスターノードと 2 つ以上の...