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

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

バントリストコンポーネントをスクロールするときに、スクロールバーの位置が保持されます。これは、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 ファイアウォール設定の簡単なチュートリアル (初心者)

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

推薦する

Linux のインスタンスにパブリック IP アドレスを割り当てる方法

説明するこのインターフェースを呼び出すときは、次の点に注意する必要があります。パブリック IP アド...

MySQL フルテキスト検索の中国語ソリューションとサンプルコード

MySQL 全文検索中国語ソリューション最近、会社のプロジェクトで、データベースで中国語を検索する機...

2013年のウェブデザインUIの最もホットなトレンド最も人気のあるUIデザイン

時は経つのが早く、わずか 6 日後には 2013 年が歴史になります。今年は、いわゆるトレンドが多す...

非常に詳細な Vue-Router のステップバイステップのチュートリアル

目次1. ルータビュー2. ルータリンク3. リダイレクト4. ルーティングエイリアス5. ルーティ...

入力できない無効な値はアクションレイヤーに渡すことができません

フォームを入力不可にしたい場合は、フォームを次のように設定します。コードをコピーコードは次のとおりで...

PXEを使用してCentOS7.6を自動的にインストールする方法の詳細なチュートリアル

1. 需要ベースには 300 台の新しいサーバーがあり、CentOS7.6 オペレーティング システ...

MySQLデータベースのストアドプロシージャとトランザクションの違い

トランザクションは、複数の SQL ステートメントの原子性、つまり、それらが一緒に完了するか、一緒に...

この記事では、Viteがブラウザのリクエストに対して何を行うかを説明します。

目次動作原理:ブラウザは何をするのですか?ホストファイル index.htmlメイン.jsその他のベ...

Linux でローカル コンピューターとリモート サーバーのポートが接続されているかどうかを確認する方法

以下のように表示されます。 1. ssh -v -p [ポート番号] [ユーザー名]@[IPアドレス...

Linux 基本チュートリアル: 特別な権限 SUID、SGID、SBIT

序文Linux のファイルまたはディレクトリの権限については、共通の rwx 権限を知っておく必要が...

HTMLポップアップdivはモバイルの中央揃えを実現するのに非常に便利です

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

MySQL データベースのマスター・スレーブ レプリケーションと読み取り/書き込み分離

目次1. マスタースレーブレプリケーションマスタースレーブレプリケーション3スレッドマスタースレーブ...

aタグのhref属性とonclickイベントの比較

まず、href 属性と onclick イベントの実行順序について説明します。マウスが a タグをク...

Win10にMySQL8圧縮パッケージ版をインストールするチュートリアル

1 公式サイトからMySQL8をダウンロードしてインストールするMySQL8 ダウンロードアドレスこ...

three.js で 3D ダイナミック テキスト効果を実現する方法

序文みなさんこんにちは。CSS ウィザードの alphardex です。以前、海外のウェブサイトを閲...