1. 程式人生 > 其它 >切換頁面儲存頁面原有的位置資訊keep-alive savedPosition meta

切換頁面儲存頁面原有的位置資訊keep-alive savedPosition meta

1 只有在mode:'history'模式生效;savedPosition,這個功能只在支援history.pushState額瀏覽器中可用。(通過瀏覽器的前進/後退 按鈕觸發)

new Router({
scrollBehavior (to, from, savedPosition) {
  if (savedPosition) {
    return savedPosition
  } else {
    return { x: 0, y: 0 }
  }
}
})

2 切換選單過程中保留原頁面的位置資訊, 結合keep-alive和路由元資訊

 <keep-alive>   //
快取元件跳轉的頁面   <router-view v-if="$route.meta.keepAlive" class="ui-view"></router-view> </keep-alive> // 非快取元件跳轉頁面 <router-view v-if="!$route.meta.keepAlive" class="ui-view" ></router-view> 路由元資訊中儲存頁面的滾動資訊 new Router({ scrollBehavior: (to, from, savedPosition) { if
(savedPosition) { return savedPosition } else { if (from.meta.keepAlive) {   from.meta.savedPosition = document.documentElement.scrollTop||document.body.scrollTop; } return { x: 0, y: to.meta.savedPosition ||0} } } }) //如果設定頁面動效有可能會影響效果;

第三種方法:在單個頁面中定義欄位記錄頁面的滾動距離

(1). 在data中定義一個初始值 scroll

(2). 在mouted中 ,mouted中的方法代表dom已經載入完畢

window.addEventListener('scroll', this.handleScroll);

(3).methods 用於存放頁面函式

handleScroll () {
       this.scroll  = document.documentElement && document.documentElement.scrollTop
       console.log(this.scroll)
}    

4.activated 為keep-alive載入時呼叫

activated() {
    if(this.scroll > 0){
        window.scrollTo(0, this.scroll);
        this.scroll = 0;
        window.addEventListener('scroll', this.handleScroll);
     }
}

5.deactivated 頁面退出時關閉事件 防止其他頁面出現問題

deactivated(){
     window.removeEventListener('scroll', this.handleScroll);
}



參考文件:
1 https://www.cnblogs.com/linjiangxian/p/11457548.html#_label0
2 https://www.cnblogs.com/goloving/p/9211233.html
3 https://github.com/vuejs/vue-router/blob/dev/examples/scroll-behavior/app.js