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

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

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

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

推薦する

Flask と Vue のフロントエンドとバックエンドを分離したプロジェクト展開のサンプル コード

以前、プロジェクトを開発しました。バックエンドのインターフェースを書くために Flask フレームワ...

Linux での Tomcat8 のインストールとアンインストールに関する詳細なグラフィック チュートリアル

[ Tomcat8 の Linux インストール ] Tomcat をアンインストールする - まず...

MySQL 5.7.20 圧縮版のダウンロードとインストールの簡単なチュートリアル

1. ダウンロードアドレス:参考: http://dev.mysql.com/downloads/m...

json.stringify() と json.parse() の違いと使い方

1. JSON.stringify() と JSON.parse() の違い私たちは皆、JSON.s...

MySQL で数千万のテストデータを含むテストデータベースを作成する方法

場合によっては、MySQL が公式に提供しているテスト ライブラリに基づいてテスト データを作成し、...

Docker で Ubuntu に Python3 と Pip をインストールする際の問題

文章1) Ubuntuイメージをダウンロードする docker プル Ubuntu 2) 画像を見る...

dockerにmysqlをインストールした後にNavicatが接続できない問題に対する完璧な解決策

1. Dockerがイメージをプルするdocker pull mysql (デフォルトで最新バージョ...

Vueのトグルボタンをクリックしてボタンを有効にし、無効にします。

実装方法は3つのステップに分かれています。テンプレートに 2 つのボタンを設定し、v-if と v-...

HTML の順序なしリストタグと順序付きリストタグの使用例

1. 上部と下部のリストタグ: <dl>..</dl>:上dt下層dd: カ...

ファイルをアップロードするための HTML フォームの「参照」ボタンを変更する方法

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

XHTML: フレーム構造タグ

フレーム構造タグ <frameset></frameset>フレームを使用す...

MySQL グループ化クエリと集計関数

概要私たちは、双十一に天猫で化粧品を購入する人の平均支出額を知りたい(商品の価格帯を見つけるのに役立...

Gearman + MySQL による永続化操作例

この記事では、gearman+mysql メソッドを使用して永続化操作を実装します。ご参考までに、詳...

Windows で mysql 8.0.12 をインストールするための詳細なチュートリアル

この記事では、MySQL 8.0.12のインストール方法に関する詳細なチュートリアルを参考までに紹介...

MySQL slow_log テーブルを InnoDB エンジンに変更することはできません。詳細な説明

背景mysql.slow_log からスロー クエリ ログを取得するのは遅く、テーブルは csv テ...