您的位置:

Vue实现返回记住滚动位置

一、为什么需要返回记住滚动位置

在进行网页滚动的时候,如果用户返回上一页,会发现页面又回到了最上面,需要重新滚动到之前的位置,体验非常不好。因此,我们就需要返回上一页时,能够记住之前的滚动位置。

二、如何实现返回记住滚动位置

Vue提供了一个非常好用的指令v-scroll,可以监控元素的滚动事件。我们只需要在返回上一页的时候,将之前的滚动位置传给下一页,再利用v-scroll指令来进行滚动,就能够实现返回记住滚动位置的功能。


// 上一页
<a :href="previousUrl" target="_self" @click="storeScrollPosition">返回上一页</a>

// 下一页
<div v-scroll="scrollPosition">...</div>

export default {
  data() {
    return {
      scrollPosition: 0
    };
  },
  methods: {
    storeScrollPosition() {
      this.scrollPosition = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
    }
  }
}

三、解析实现代码

我们使用了v-scroll指令来监控元素的滚动事件。具体来说,我们将滚动位置存储在scrollPosition变量中,然后在下一页中,使用v-scroll指令来进行滚动。


<div v-scroll="scrollPosition">...</div>

export default {
  data() {
    return {
      scrollPosition: 0
    };
  }
}

我们在下一页的div中绑定了v-scroll指令,将之前的滚动位置传递给scrollPosition变量。这样,当用户返回之前的页面时,scrollPosition的值就被保留下来。

在上一页中,我们将scrollPosition的值传递给下一页。


<a :href="previousUrl" target="_self" @click="storeScrollPosition">返回上一页</a>

export default {
  methods: {
    storeScrollPosition() {
      this.scrollPosition = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
    }
  }
}

我们在上一页的a标签中,绑定了storeScrollPosition方法,将当前滚动位置存储在scrollPosition变量中。然后,我们在query或params中将这个变量传递给下一页,这样下一页就能够使用它。

四、实现效果演示

我们可以使用如下代码来展示实现效果:


// 上一页
<a :href="previousUrl" target="_self" @click="storeScrollPosition">返回上一页</a>

// 下一页
<div v-scroll="scrollPosition">...</div>

export default {
  data() {
    return {
      scrollPosition: 0
    };
  },
  methods: {
    storeScrollPosition() {
      this.scrollPosition = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
    }
  }
}

执行上面的代码,然后在上一页中滚动一段距离并返回下一页,就会看到滚动位置被记住了。

五、总结

Vue提供了非常好用的v-scroll指令,可以实现返回记住滚动位置的功能。我们只需要将滚动位置存储在一个变量中,在下一页中再使用v-scroll指令进行滚动即可。