Vue Router 記住頁面滾動位置的簡單實現


本質就是, 利用內置組件<keep-alive>在頁面組件得以被緩存的基礎上, 再加以document.documentElement.scrollTop獲取滾動距離, 后返回頁面時恢復滾動距離
實現效果, 打開A頁面, 滾動至a處, 切換至B頁面, 返回A頁面, 此時頁面位置為a點而非頂部


路由出口

  <div class="main">
    <!-- 包裹`<keep-alive>` -->
    <keep-alive>
      <router-view></router-view>
    </keep-alive>
  </div>

頁面組件

  export default {
    data(){
      scrollTop: 0, // 儲存滾動位置
    },
    activated() {
      // 進入該組件后讀取數據變量設置滾動位置
      // 注意, 此處由頁面是否具有 DTD (如: `<!DOCTYPE html>`), 決定具體選擇, 詳見參考資料
      document.documentElement.scrollTop = this.scrollTop;
      // document.body.scrollTop = this.scrollTop;
    },
    beforeRouteLeave(to, from, next) {
      // 離開組件時保存滾動位置
      // 注意, 此時需調用路由守衛`beforeRouterLeave`而非生命周期鈎子`deactivated`
      // 因為, 此時利用`deactivated`獲取的 DOM 信息已經是新頁面得了
      this.scrollTop = document.documentElement.scrollTop;
      next();
    },
  }

參考資料: document.documentElement和document.body的區別


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM