バントリストコンポーネントをスクロールしても、スクロールバーの位置は保持されます。

バントリストコンポーネントをスクロールしても、スクロールバーの位置は保持されます。

バントリストコンポーネントをスクロールするときに、スクロールバーの位置が保持されます。これは、keepAlive と組み合わせて使用​​する必要があります。参考までにこの記事を共有します。

1. 場所を保存する前提は、キャッシュ用のkeepAliveコンポーネントを使用することです。app.vueコード

<テンプレート>
  <div id="アプリ">
    <キープアライブ>
      <ルータービュー v-if='$route.meta.keepAlive'/>
    </キープアライブ>
    <ルータービュー v-if='!$route.meta.keepAlive'/>
  </div>
</テンプレート>

2. ルーティングファイルrouter.jsで、各ルーティングメタにscrollTopとkeepAliveを追加します。

 {
      パス: '/home',
      名前: 'ホーム',
      コンポーネント: 解決 => require(['@/views/home/index.vue'], 解決),
      メタ: {
        タイトル: 'ホームページ'、
        インデックス: 1,
        キープアライブ: 真、
        スクロールトップ: 0
      }
    },
    {
      パス: '/classify',
      名前: '分類'、
      コンポーネント: 解決 => require(['@/views/classify/index.vue'], 解決),
      メタ: {
        タイトル:「分類」
        インデックス: 1,
        キープアライブ: 真、
        スクロールトップ: 0
      }
    },
    {
      パス: '/shopping',
      名前: 「ショッピング」
      コンポーネント: 解決 => require(['@/views/shopping/index.vue'], 解決),
      メタ: {
        タイトル: 「ショッピングカート」
        インデックス: 1,
        キープアライブ: 真、
        スクロールトップ: 0
      }
    },
    {
      パス: '/detail',
      名前: '詳細',
      コンポーネント: 解決 => require(['@/views/detail/index.vue'], 解決),
      メタ: {
        タイトル: 「詳細」
        インデックス: 2,
        // キープアライブ: true,
        // スクロールトップ: 0
      }
    },

3. 次にmain.jsでスクロールバーの位置を記録します。

router.beforeEach((to, from, next) => {  
  if (from.meta.keepAlive) {
    const $wrapper = document.querySelector('.app-wrapper'); // リストの外側のコンテナーは、スクロール ボックスの検索に注意する必要があります const scrollTop = $wrapper ? $wrapper.scrollTop : 0;
    console.log('scrollTop=', スクロールトップ)
    スクロールトップをスクロールします。
  }
  次();
});

4. 最後に、scrollTopをアクティブ化して取得します(この関数はページに入るたびに実行され、keepAliveコンポーネントと組み合わせて使用​​した場合にのみ有効です)。ここで、スクロールバーの位置を記録する必要があります。

アクティブ化(){
    定数 scrollTop = this.$route.meta.scrollTop;
    定数 $wrapper = document.querySelector('.app-wrapper');
    スクロールトップと$ラッパーの場合{
      $wrapper.scrollTop = スクロールトップ;
    }
  },

たとえば、一部のページをキャッシュし、そのページをスクロールしたくない場合は、scrollTop を 0 に設定できます。

アクティブ化() {
    const $wrapper = document.querySelector(".app-wrapper");
    $wrapper.scrollTop = 0;
  },

ページがスクロールすると、スクロールバーのある他のページも一緒にスクロールすることに注意してください。他のページで処理するか、詳細ページから一覧ページまでの位置をキャッシュするかどうかを決定します。そうでない場合は先頭に戻りますが、ルーティングフック関数の使用に注意してください。

以下もご興味があるかもしれません:
  • Vue vantUI タブを切り替えたときにリスト コンポーネントがロード イベントをトリガーしない問題と解決策
  • vant における van-list の使用
  • Vant フレームワークを使用して H5 を実行する際の落とし穴を解決します (プルダウンして更新、プルアップして読み込みなど)。
  • vant-ui フレームワークのバグ (切り替え後に onload がトリガーされない問題を解決)
  • Vant フレームワーク リスト コンポーネントを使用する際の落とし穴と解決策

<<:  Ubuntu 20.04 ファイアウォール設定の簡単なチュートリアル (初心者)

>>:  コード例を通してページ置換アルゴリズムの原理を理解する

推薦する

JavaScriptは4桁のランダム検証コードの生成を実装します

この記事の例では、JavaScriptで4桁のランダムな検証コードを生成する具体的なコードを参考まで...

Nginx の http リソース リクエスト制限の詳細な説明 (3 つの方法)

前提条件: nginx には、ngx_http_limit_conn_module モジュールと n...

Vue.js での $emit の使用に関する詳細な説明

1. 親コンポーネントは props を使用して子コンポーネントにデータを渡すことができます。 2....

背景とリンクとして画像を書き込む方法(背景画像+リンク)

写真を背景にしてリンクを記載します。たとえば、ウェブサイトのロゴ画像などです。例: ポテトのロゴ画像...

Vueはページを更新するために3つの方法を使用する

プロジェクトを作成しているときに、ユーザーがアクションを実行し、特定の状態を変更し、ページを更新して...

Docker での Redis の最も詳細なインストールと構成 (画像とテキスト付き)

1. Dockerに適したRedisのバージョンを見つけるdocker hubで見つけることができ...

Linux システムで grub.cfg ファイルの破損を修復する手順

目次1. grub.cfg ファイルの紹介1. grub.cfg ファイルの場所2. grub.cf...

MySQL ストアド プロシージャの使用例の分析

この記事では、MySQL ストアド プロシージャの使用方法について説明します。ご参考までに、詳細は以...

sqlmap インジェクションの詳細なグラフィック説明

目次1. この Web サイトには SQL インジェクションの脆弱性がある可能性があることが判明しま...

docker によってプルされたイメージがどこに保存されるかの詳細な説明

docker によってプルされたコマンドは、デフォルトでは /var/lib/docker/ フォル...

Linux で MongoDB のリモート自動バックアップを実装する方法

序文古いプロジェクトを引き継ぐ苦労 - MongoDB クラスターの学習と構築に関する前回の記事を読...

Docker execは複数のコマンドを実行します

docker exec コマンドは、実行中のコンテナ内でコマンドを実行できます。 docker ex...

MySQL における varchar 型と char 型の違い

目次前述のVARCHAR型VARCHAR適用可能な状況CHAR型テストVARCHAR(5)とVARC...

間違った MySQL コマンドをキャンセルしたい場合はどうすればいいですか?

間違った mysql コマンドを入力したのでキャンセルしたいです。どうすればいいですか? ctrl ...

HTML iframe で親ページと子ページ間の双方向メッセージングを実装する例

ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセー...