序文テーブルをよく使用します。データ量が多い場合は直接ページ区切りで表示できますが、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 を使用していませんでした。今日、MySQL...
同僚から、停電のため MySQL インスタンスを起動できないという報告がありました。 innodb_...
目次ルーティングプラグインをモジュール方式で使用するルートの使用宣言型ナビゲーションプログラムによる...
概要: nginx リバース プロキシ jira を構成し、https を実装します。Tomcat ...
1. 単一テーブルクエリ -> 更新 テーブル名の更新 フィールド1=新しい値1、フィールド2...
方法1: テーブル属性を使用する: header-cell-class-name テーブルインターフ...
MySQL はリレーショナル データベース管理システムです。リレーショナル データベースは、すべて...
この記事では、カレンダー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...
この記事では、Element-uiを使用してvue.jsでナビゲーションメニューを実装するための具体...
インストール手順 rpm -ivh mysql-コミュニティ-共通-5.7.18-1.el7.x86...
OBS studioかっこいいですが、 JavaScriptもっとかっこいいです。では、 JavaS...
目次序文1. ファイルのディスク使用量を確認する1.1 ディスク容量の使用状況を確認する1.2 ディ...
問題の原因:スレーブサーバーがクローンマスターサーバーである場合、server-uuidの値は同じで...
1. コマンド mysqld --skip-grant-tables を入力します (前提条件: m...
<br />英語アドレス: http://developer.yahoo.com/per...