序文テーブルをよく使用します。データ量が多い場合は直接ページ区切りで表示できますが、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 つのパラダイム例分析
データベースの移行は、よく遭遇する問題です。データ量が少ない場合、移行は基本的に問題になりません。実...
mysql ログインのコマンド形式は次のとおりです。 mysql -h [hostip] -u [ユ...
Linux は、システム内のデバイス、インターフェース、ファイル、スタートアップ、アプリケーション ...
1. nginxの動的と静的の分離の簡単な設定web1は静的サーバー、web2は動的サーバー、nod...
背景<br />フロントエンドを担当する学生は、ページが多すぎると煩雑になるため、開発プ...
結果: 実装コードhtml <div id="価格表" class=&qu...
目次序文開発環境新しいプロジェクトを作成するモバイルウェブプロジェクト角度付きJSONパブリックモジ...
<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...
NetEase Blog でコードを使用する方法: まずブログにログインし、ブログのホームページの左...
目次ネットワーク構成を表示するネットワークインターフェース情報を表示する---ifconfigルーテ...
背景ブラウザの互換性の問題を解決するのは非常に面倒なことです。高度な技術はそれほど必要ありませんが、...
1. mysqldump バックアップ方法では論理バックアップが使用されます。最大の欠点は、バック...
キーワード 一般タイトルには、クラック、キー、シリアル番号、キージェネレータなどの単語を含めることは...
表のキャプションは表の上または下に配置でき、プロパティで調整できます。デフォルトのテーブル タイトル...
以下はすべて仮想マシン上で実行されます1. pip3をインストールするsudo apt で pyth...