国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue使用keep-alive保持滾動條位置的實現(xiàn)方法

2019-11-19 11:51:06
字體:
供稿:網(wǎng)友

前言

下班前,20分鐘,發(fā)一篇。。。

簡單介紹,使用keep-alive的時候,返回前一頁,沒有保持滾動條位置。

事實上,就算不使用keep-alive,位置也沒有被記錄。

但是,在不適用keep-alive的時候,頁面內(nèi)容會刷新,所以就隨他去了……就是這么任性……

思路

官方有推薦一個scrollBehavior,鏈接,但是上面標(biāo)注,只在history.pushState的瀏覽器生效,不知道是不是只能開啟history.pushState才可以使用,看了下實現(xiàn),挺不友好的,還是自己搞一個吧。。。

實現(xiàn)思路是這樣的,首先給路由增加一個對象meta:

meta: {  keepAlive: true,  scrollTop: 0,}

keepAlive是否需要保持頁面,scrollTop記錄頁面的滾動位置。

然后在app.vue增加如下入口:

<keep-alive>  <router-view v-if="$route.meta.keepAlive"></router-view></keep-alive><router-view v-if="!$route.meta.keepAlive"></router-view>

這樣就啟用keep-alive了。

然后在全局main.ts增加一個全局路由控制:

router.beforeEach((to: Route, from: Route, next: () => void) => {    if (from.meta.keepAlive) {  const $content = document.querySelector('#content');  const scrollTop = $content ? $content.scrollTop : 0;  from.meta.scrollTop = scrollTop; } next();});

很簡單,離開的時候判斷當(dāng)前頁是否需要保持頁面,如果需要,記錄頁面主容器content的滾動位置,寫入路由。

然后,每次進入保持好的頁面,讀取滾動條位置scrollTop,修改主容器的scrollTop,就搞定了:

public activated() {  const scrollTop = this.$route.meta.scrollTop;  const $content = document.querySelector('#content');  if (scrollTop && $content) {   $content.scrollTop = scrollTop;  }}

看起來很簡單哦。

遺留問題

1、是不是每個頁面都可以記錄滾動條位置呢?

其實不是的,有的頁面,內(nèi)部有js交互,比如tab交互,不同的tab,頁面可滾動的高度不一致,如果不保持頁面狀態(tài)而統(tǒng)一記錄滾動位置,有可能導(dǎo)致滾動條的位置錯位。

2、能不能把activated這一步寫到全局的main.ts或者state去呢?

有想過這點,但是目前來說,沒找到實現(xiàn)的方法。

首先,如果通過router來控制,做不到,全局路由控制只能在頁面加載前監(jiān)聽,取不到載入頁的元素。

如果寫在一個通用的全局函數(shù)去控制,比如定義一個state,當(dāng)頁面加載完的時候設(shè)置,那需要定義一個mixins來處理,但是對這個mixins不太熟悉,暫時還不知道該怎么做,可能有時間找個方法搞定它。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄梅县| 增城市| 黄梅县| 德州市| 南华县| 和林格尔县| 淮阳县| 始兴县| 华宁县| 黑山县| 浦城县| 宝鸡市| 东丽区| 板桥市| 天镇县| 阳曲县| 邢台县| 西乌珠穆沁旗| 勐海县| 泰和县| 乌拉特中旗| 平远县| 青冈县| 汶上县| 宜昌市| 防城港市| 井冈山市| 琼结县| 铜山县| 海门市| 镇宁| 贵南县| 北安市| 韶关市| 南召县| 贡嘎县| 依安县| 高安市| 辽源市| 扬中市| 勃利县|