keep-alive、keep-aliveを使用すると、スクロールバーの位置が保存されます。

1. Keep-aliveは、Vueが提供する組み込みコンポーネントであり、非アクティブなコンポーネントインスタンスを破棄するのではなくキャッシュします。ラベルとして使用され、キャッシュする必要のあるコンポーネントの外部にラップされます。

2.コンポーネントの切り替えプロセス中は切り替えられたコンポーネントをメモリに保持して、DOMレンダリングの繰り返しを防ぎ、読み込み時間とパフォーマンスの消費を減らし、ユーザーエクスペリエンスを向上させます。

3.機能:たとえば、リストページに詳細が入力されたときに、リストのスクロール位置を保存したい場合、keep-aliveを使用してリストページのスクロール位置を保存できます。

4.コンポーネントがkeep-aliveを使用した後、2つの新しいライフサイクルactived()deactived()が追加されます

activated 被缓存的组件激活时调用。

deactivated  キャッシュコンポーネントが非アクティブ化されたときに呼び出されます。

<template>
  <div class="maxBox">
    <div ref="list" @scroll="alive" class="content-list">
      <li v-for="(v, i) in 100" :key="i">{
   
   { v }}</li>
    </div>
  </div>
</template>

<script>
export default {
  name: "Home",
  data() {
    return {
      scrollPages: 0, // 缓存当前滚动条的位置
    };
  },
  mounted() {},
  methods: {
    alive(e) {
      console.log(e.target.scrollTop);
     // 获取页面滚动条的位置
      this.scrollPages = e.target.scrollTop; 
    },
  },
  activated() {
    // 缓存组件激活时调用
    this.$refs.list.scrollTop = this.scrollPages; // 获取 dom 的scrollTop = 缓存的滚动条位置
  },
};
</script>

<style lang="scss">
.maxBox {
  width: 100%;
  height: 100%;
}
.content-list {
  width: 100%;
  height: 100%;
  overflow-y: scroll;
  li {
    width: 100%;
    height: 20px;
    background-color: #ccc;
    margin: 20px 0;
    display: flex;
  }
}
</style>

app.view

<template>
  <div id="app">
    <!-- include 指定要缓存的页面, Home 页面要有配置name:Home。 
     要想缓存多个以 , 分割后面跟组件名字  -->
    <!-- exclude 指定不需要缓存的页面 -->
    <keep-alive include="Home,About">
      <router-view />
    </keep-alive>

    <!-- 数组 -->
    <!-- <keep-alive :include="['Home','About']">
      <router-view />
    </keep-alive> -->

    <!-- 正则 -->
    <!-- <keep-alive :include="/Home|About/">
      <router-view />
    </keep-alive> -->

    <footer>
      <router-link to="/">页面一</router-link>
      <router-link to="/About">页面二</router-link>
    </footer>
  </div>
</template>
<script>
export default {
  data() {
    return {};
  },
  mounted() {},
  methods: {},
  components: {},
};
</script>
<style lang="scss">
// 要给父元素设置高100%否则不生效
body,
html,
#app {
  width: 100%;
  height: 100%;
}
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
li {
  list-style: none;
}

footer {
  width: 100%;
  height: 40px;
  border-top: 1px solid #ccc;
  position: fixed;
  bottom: 0;
  background-color: #fff;
  left: 0;
  display: flex;
  justify-content: space-around;
  align-items: center;
}
</style>

Moは白人の男の子を待っています、頭は空で悲しいです--s --z -h

おすすめ

転載: blog.csdn.net/qq_54753561/article/details/122189446