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

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

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

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

推薦する

浮遊する雲のアニメーションを実現するCSS3

操作効果 html <ヘッド> <メタ文字セット='UTF-8'&...

Linux で Squid プロキシ サーバーを構築するための完全な手順

序文この記事では、Linux で Squid プロキシ サーバーを設定することに関する関連コンテンツ...

Linux calコマンドの使用

1. コマンドの紹介cal (カレンダー) コマンドは、現在の日付または指定された日付のグレゴリオ暦...

offsetWidth、clientWidth、scrollWidth、scrollTop、scrollLeft などのプロパティの図。

注 1: 上の画像の背景全体がこの Web ページのフルサイズであり、中央の小さなボックスがブラウザ...

Dockerにlogstashをインストールする詳細な手順

docker-compose.yml を編集し、次のコンテンツを追加します。 バージョン: '...

CSS属性のマージンの理解について話す

1.マージンとは何ですか?マージンは、要素の周囲のスペースの間隔を制御するために使用され、視覚的にス...

ウェブページ印刷細線表+ページ印刷究極の戦略

最近、クライアントのために印刷していたとき、ページのヘッダーを印刷するのではなく、表の内容だけを印刷...

Reactのref属性を深く理解する方法

目次概要1. Refsオブジェクトの作成1.1 React.createRef() 1.2React...

MySql5.7.21 インストールポイント記録メモ

ダウンロードしたバージョンは、Zip 解凍版、Windows システムです。長い間 Windows ...

Win10にnginxをインストールして設定するプロセス

1. はじめにNginx は、無料のオープンソースの高性能 HTTP サーバーおよびリバース プロキ...

border-radiusは要素に丸い境界線を追加する方法です

border-radius:10px; /* すべての角は半径 10px で丸められます*/ bor...

Alibaba Cloud Ubuntu 16.04でpptpdサービスを構築する方法

1. PPTP VPNを構築するには、ポート1723とGREプロトコルを開く必要があります。 1. ...

Linux に起動方法を追加する (サービス/スクリプト)

システムの起動時に読み込む必要がある設定ファイル/etc/profile、/root/.bash_p...

CentOS8でのDockerの使い方の詳しい説明

1. CentOS8でのDockerのインストール カール https://download.doc...

よく使われるHTMLタグのインライン要素とブロックレベル要素の詳細な説明

ブロック要素HTMLタグ分類の詳細* 住所 - 住所* blockquote - ブロック引用* c...