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

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

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

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

推薦する

MySQL データベースで機密データの暗号化と復号化を実装する方法

目次1. 準備2. MySQL暗号化関数方式2.1 MySQL 暗号化2.2 MYSQL 復号化3....

Docker ベースのよく使われる CentOS7 イメージの概要

目次1 Dockerをインストールする2 国内ミラーソースの設定3 中国語環境基本版Centos7イ...

画像カルーセルを実装するためのネイティブJS 小さな広告プラグインを実装するためのJS

最近、ネイティブ JS を使用して、さらにいくつかの小さな機能を実装したいと思っています。現在、ブロ...

CSS のグリッドプロパティの使用に関する詳細な説明

グリッドレイアウト親要素に追加された属性グリッドテンプレートの列/グリッドテンプレートの行要素の行ま...

ネガティブマージン関数の紹介と使用方法の概要

1998 年の CSS2 勧告の時点で、テーブルは徐々に舞台から消え、歴史の中に記録されるようになり...

MySQLクエリが遅い場合の理由と解決策

Python プログラムを書き、Mysql ライブラリを集中的に操作したためです。データ量が多くない...

Mysqlはフィールドスプライシングのための3つの関数を実装している

データをオペレーションにエクスポートする場合、フィールドの結合は避けられません。MySQL でこれが...

VMware に Centos7 をインストールした後に外部ネットワークに ping できない問題を解決する

クラスターを構成する際に問題が発生しました。当初は 3 台の仮想マシンすべてが外部ネットワークに p...

Linux で SVN サーバーをインストールする方法

1. Yumのインストール yum でサブバージョンをインストール 2. 構成1. 倉庫を作る/ho...

Dockerでnginxを実行し、ローカルディレクトリをイメージにマウントする方法

1 hupからイメージを取得する docker プル nginx 2 マウントするディレクトリを作成...

Nginx の書き換え正規マッチング書き換え方法の例

Nginx の書き換え機能は、リダイレクトと同様に、URL アドレスを一時的または永続的に新しい場所...

MySQL バックアップ スクリプトの書き方

序文:データベースのバックアップの重要性は、特にデータの損失が深刻な結果を招く可能性がある実稼働環境...

ドラッグ可能で編集可能なガントチャートの詳細な説明(HighchartsはVueとReactで使用できます)

序文Excel は強力で、広く使用されています。 Web アプリケーションの登場と改善に伴い、ユーザ...

MySQLのよくある間違い

NULL 値によると、MySQL の NULL 値は単にデータがないことを意味します。NULL 値は...

Vue シングルページ SEO の 4 つのソリューションについての簡単な説明

目次1.Nuxtサーバーサイドレンダリングアプリケーションの展開(SSRサーバーレンダリング)利点:...