Vue-router的滾動行爲

滾動行爲

使用前端路由,當切換到新路由時,想要頁面滾到頂部,或者是保持原先的滾動位置,就像從新加載頁面那樣。 vue-router 能作到,並且更好,它讓你能夠自定義路由切換時頁面如何滾動。javascript

注意,這個功能只能在history模式下啓用html

var router=new VueRouter({
    routes:[],
    scrollBehavior(to,from,savedPosition){
        //return 滾動的位置
    }
})

scrollBehavior 方法接收 to 和 from 路由對象。第三個參數 savedPosition 當且僅當 popstate 導航 (經過瀏覽器的 前進/後退 按鈕觸發) 時纔可用。前端

滾動位置的對象:vue

  • {x:number,y:number}
  • {selector:string}

例如:java

scrollBehavior(to,from,savedPosition){
    return{x:number,y:number}
}

意思就是全部的路由導航,都會返回到頁面的頂部.vue-router

滾動到錨點:瀏覽器

scrollBehavior (to, from, savedPosition) {
  if (to.hash) {
    return {
      selector: to.hash
    }
  }
}

利用錨點行爲作一個小例子,一個藍色和紅色的P標籤做爲錨點,當點擊相應的連接時,頁面滾動到相應的錨點上:app

圖片描述

HTML編輯器

<div id="app">
    <h1>滾動效果</h1>
    <ul class="ul">
        <li><router-link to="/">首頁</router-link></li>
        <li><router-link to="/nav">導航</router-link></li>
        <li><router-link to="/about">關於</router-link></li>
        <li><router-link to="/about#red">紅</router-link></li>
        <li><router-link to="/about#blue">藍</router-link></li>
    </ul>
    <br/>
    <router-view></router-view>
</div>

javascriptspa

var Home = {
    template:"<div>home</div>"
}
var Foo = {
    template:"<div>nav</div>"
}
var Bar = {
    template:
        `
            <div>
                about
                <div style="height:200px;"></div>
                <p id="red" style="height:500px;background: red;color:#fff">紅色頁面</p>
                <p id="blue" style="height:300px;background: blue;color:#fff">藍色頁面</p>
            </div>
        `
}

var router = new VueRouter({
    mode:"history",
    //控制滾動位置
    scrollBehavior (to, from, savedPosition) {
        //判斷若是滾動條的位置存在直接返回到當前位置,否者返回到起點
        if (savedPosition) {
            return savedPosition
        } else {
            if (to.hash) {
                return {selector: to.hash}
            }
        }
    },
    routes:[
        {
            path:"/",component:Home
        },
        {
            path:"/foo",component:Foo
        },
        {
            path:"/about",component:Bar
        }
    ]
});
var vm = new Vue({
    el:"#app",
    router
});

你們能夠把html部分和js部分複製到本身的編輯器中試一試

相關文章
相關標籤/搜索