在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ vue 路由切換時 有沒有什么成熟的方案實現(xiàn)ios平滑過渡

vue 路由切換時 有沒有什么成熟的方案實現(xiàn)ios平滑過渡

vue 路由切換時 有沒有什么成熟的方案實現(xiàn)ios平滑過渡

試過給路由增加一個索引存到sessionStorage里面,以點擊過的索引值不變,新增加的路由,索引增加1,同時count+1,這樣在頁面切換時通過比較索引值的大小,大的向右小的向左,做到左右有規(guī)律的過渡
首頁->個人中心->綁定賬號。 沒問題 , 但是從綁定賬號頁面回到個人中心的時候出問題了 沒行通

還有沒有什么成熟的方案?

回答
編輯回答
祉小皓

stack其實并不是一個很好的方案,正常從首頁進列表頁的話,返回都沒問題,但是列表頁直接刷新之后再回到首頁的時候就會有問題。

所以有這樣一個方案就是定義幾個數(shù)組,把有可能從前到后頁面轉場順序都定義出來,然后路由變化的時候,遍歷這幾個數(shù)組,查到這兩個路由在數(shù)組中的順序來決定使用哪種動畫

2017年3月25日 11:44
編輯回答
熊出沒

你想實現(xiàn)原生的stack的效果是吧,但是vue的路由是基于h5的history實現(xiàn)的,網上的思路:
圖片描述

2017年9月4日 05:05
編輯回答
情殺

我剛好做了一個app的項目,用到了這個方法.
可以自定義一個 meta的index,在 app.vue,比較當前的index和from的index,給transition添加從slide-right還是slide-left.

app.vue

<template>
  <div id="app">
    <transition :name="transitionName">
        <router-view class="child-view"></router-view>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'app',
  data() {
    return {
      transitionName: ''
    }
  },
  watch: {
    $route(to, from) {
      if (to.meta.index > 0) {
        if (to.meta.index < from.meta.index) {
          this.transitionName = 'slide-right'
        } else {
          this.transitionName = 'slide-left'
        }
      } else if (to.meta.index === 0 && from.meta.index > 0) {
        this.transitionName = 'slide-right'
      }
    }
  }
}

router

export default new Router({
  routes: [
    {
      path: '/',
      name: 'home',
      component: resolve => require(['../page/home'], resolve),
      meta: {
        index: 0
      }
    },
    {
      path: '/center',
      name: 'center',
      component: resolve => require(['../page/center'], resolve),
      meta: {
        index: 1
      }
    },
    {
      path: '/account',
      name: 'account',
      component: resolve => require(['../page/account'], resolve),
      meta: {
        index: 2
      }
    }
  ]
})

路由切換動畫

.child-view {
  position: absolute;
  width: 100%;
  height: 100%;
}

.slide-right-enter-active,
.slide-right-leave-active,
.slide-left-enter-active,
.slide-left-leave-active {
  will-change: transform;
  transition: all 0.45s ease-out;
  position: absolute;
}

.slide-right-enter {
  opacity: 0;
  transform: translate(-100%, 0);
}

.slide-right-leave-active {
  opacity: 0;
  transform: translate(0%, 0);
}

.slide-left-enter {
  opacity: 0;
  transform: translate(100%, 0);
}

.slide-left-leave-active {
  opacity: 0;
  transform: translate(0%, 0);
}
2017年6月11日 02:18