由于项目是一个单页面应用, 在进行路由push后滚动条不会刷新,也就是说当前页面和上一个页面的滚动条的相对位置一样。
就像这样
点击阅读全文过后, 进入某个文章的详情页面,按道理来讲是应该从头开始阅读的。 然而滚动条却已经滚动了一部分距离了
当然上面的图只是模拟, 并不是真正的单页面应用。不过单页面应用确实存在这个问题,这个问题产生的原因可能是 document 还是原来的 document,单页面跳转路由其实向这个 document 中添加和删除节点而已,导致浏览器认为你仍然在浏览同一个页面。使用移动端访问https://blog.linyqiang.com时就可以看到“两个页面的” document.documentElement.scrollTop / document.documentElement.scrollHeight 是一样的(因为移动版版面没有采用自定义滚动)
鉴于上述情况,可以让页面中的某一个部分实现滚动(overflow:scroll)。不过这样滚动条只能紧贴在某个滚动元素的右边,影响美观,因此自己实现一个滚动条来模拟滚动
自定义的ScrollBar.vue
接下来就是在页面中使用ScrollBar.vue了
|
|
|
|