过渡动效

当路由进行切换时也可以进行
效果图
过渡特效.gif
只需要用 <transition> 元素包裹起来,过渡的详细笔记可以看动画与过渡
源码如下
app.vue的代码

  1. <template>
  2. <div id="app">
  3. <div class="nav-box">
  4. <div class="logo" @click="handleClick">zxt</div>
  5. <!-- <router-link to="/home" tag="div" class="logo" >ZXT</router-link> -->
  6. <div class="nav-list">
  7. <router-link to="/home">首页</router-link>
  8. <router-link to="/learn">课程学习</router-link>
  9. <router-link to="/show">学员展示</router-link>
  10. <router-link to="/about">关于</router-link>
  11. <router-link to="/community">社区</router-link>
  12. </div>
  13. </div>
  14. <div class="content">
  15. <!-- 添加过渡效果-->
  16. <transition>
  17. <router-view></router-view>
  18. </transition>
  19. </div>
  20. </div>
  21. </template>

app.vue 代码中过渡动画的代码

  1. /* 过渡的动画 */
  2. .v-enter{
  3. transform: translateX(1000px);
  4. }
  5. .v-enter-active{
  6. transition: all .2s;
  7. }
  8. .v-enter-to{
  9. transform: translateX(0);
  10. }

滚动行为—单页面应用的缺陷

单页面应用只用一个HTML文件,所有的页面效果都会在这一个页面上渲染,当一个页面滚动到底部进行跳转,跳转后的页面会直接显示页面底部,这是单页应用缺陷,页面会重新渲染,但是页面滚动的行为还一直保留着,可看下面的效果图
滚动行为.gif
从上面效果图可以看出首页页面底部有一段文字为“测试” 关于页面的底部可以跳转到首页,滚动到关于页面的底部单击“回到首页”,会跳转到首页,但是滚动条的位置却还停留在页面的底部,这就是单页面应用的滚动条的缺陷

解决单页面应用的滚动条的缺陷

注意: 这个功能只在支持 history.pushState 的浏览器中可用。
当创建一个 Router 实例,你可以提供一个 scrollBehavior 方法:

  1. const router = new VueRouter({
  2. routes: [...],
  3. scrollBehavior (to, from, savedPosition) {
  4. // return 期望滚动到哪个的位置
  5. }
  6. })

scrollBehavior 方法接收 to 和 from 路由对象。第三个参数 savedPosition 当且仅当 popstate 导航 (通过浏览器的 前进/后退 按钮触发) 时才可用。
scrollBehavior 返回滚动位置的对象信息,长这样:

  • { x: number, y: number }

    1. scrollBehavior (to, from, savedPosition) {
    2. return { x: 0, y: 0 }
    3. }
  • { selector: string, offset? : { x: number, y: number }} (offset 只在 2.6.0+ 支持)

    1. scrollBehavior (to, from, savedPosition) {
    2. if (to.hash) {
    3. return {
    4. selector: to.hash // selector 的 值为 hash值
    5. }
    6. }
    7. }

    示例代码
    解决缺陷的代码

    1. const router = new VueRouter({
    2. mode: 'history',
    3. routes,
    4. // 单页应用,会在一个HTML文件里绘制所有页面,当进行跳转时不会到该跳转页的首屏,而是跳转前页面的滚动条滚动的位置,跳转页面的滚动位置就会等于跳转前滚动位置
    5. scrollBehavior(to,from,savedPosition){
    6. if(savedPosition){
    7. // 当也会回退或前进时恢复之前或之后的页面状态
    8. return savedPosition
    9. }else{
    10. // 当有hash值 跳转到页面hash值得地方 hash值也就是锚点
    11. if(to.hash){
    12. return { selector : to.hash}
    13. }else{
    14. // 当没有锚点默认到首屏
    15. return {x: 0, y: 0}
    16. }
    17. }
    18. }
    19. })

    home.vue 的代码 ```vue

    1. about.vue的代码
    2. ```vue
    3. <template>
    4. <div class="about">
    5. <div>关于</div>
    6. <router-link to="/home#center" tag="div" class="home-hash">首页锚点</router-link>
    7. <router-link to="/" tag="div" class="bottom"> 回到首页 </router-link>
    8. </div>
    9. </template>
    10. <style scoped>
    11. .home-hash{
    12. margin-top: 100px;
    13. }
    14. .bottom{
    15. margin-top: 1000px;
    16. cursor: pointer;
    17. }
    18. </style>

    效果图
    滚动行为.gif