????????使用vue制作一個(gè)單頁面應(yīng)用,這里有個(gè)需求就是返回上一級頁面的時(shí)候,滾動條滾動到之前瀏覽到的位置。具體就是三個(gè)頁面,頁面之間使用路由切換,? ? ? ? 首頁—>子頻道頁面—>詳情頁? ? ? ? ?這樣的順序,但是由于我是在子元素比如class="xx-scroll" 上使用overflow:auto,來使子元素進(jìn)行滾動,所以瀏覽器自動回滾不起作用了,我就使用keep-alive緩存上一級頁面,然后自己設(shè)置回滾? ? ? ? ?首頁,子頻道頁默認(rèn)緩存,keepAlive:true ,詳情頁默認(rèn)不緩存? ? ? ? ?具體就是在路由的meta信息里設(shè)置一個(gè)scrollTop,然后頁面跳轉(zhuǎn)是觸發(fā)一個(gè)方法? ? ? ? ?首先記錄下當(dāng)前元素的scrollTop值,設(shè)置一個(gè)ref把當(dāng)前元素保存下來? ? ? ? ?然后才使用$route.push跳轉(zhuǎn)。? ? ? ? ?再使用watch監(jiān)聽$route????watch:{
??????$route(to,from){if(to.name=='index'){this.$ref.ref.scrollTop=tthis.$route.meta.scrollTop}}
????}? ? ? ? ?這里我發(fā)現(xiàn)一個(gè)問題,當(dāng)?shù)谝淮芜M(jìn)入首頁,如果首頁和子頁面的都是緩存狀態(tài),? ? ? ? ?那么 子頁面->首頁 的滾動條回滾就不會生效,我查看了一下? ? ? ? ??????watch:{
??????$route(to,from){
??????if(to.name=='index'){
??????this.$ref.ref.scrollTop=this.$route.meta.scrollTop
??????console.log('1'+this.$route.meta.scrollTop)
??????console.log('2'+this.$ref.ref.scrollTop)
??????}
??????}
????}????????? ? 結(jié)果打印出來1的值是正確的值,而2的值是0? ? ? ? ? ? 我就猜是不是其實(shí)賦值是成功的,但是后面有個(gè)事件把這個(gè)元素的scrollTop值又改為0了? ? ? ? ? ? 所以我就使用setTimeout讓? ? ? ? ? ????????this.$ref.ref.scrollTop=this.$route.meta.scrollTop????????????這個(gè)語句過1s后執(zhí)行,結(jié)果沒問題? ? ? ? ? ? 我想請問一下,設(shè)置scrollTop值以后發(fā)生了什么事件導(dǎo)致它的值又歸0了,我怎么才能知道發(fā)生了什么呢
請教一下各位關(guān)于滾動條回滾的問題
可以說很強(qiáng)了
2018-05-27 20:43:39