少し前にモバイルスパプロジェクトを作りました。技術はvue + vue-router + vuex + mint-uiに基づいています
vue-cliスキャフォールディングのWebpackテンプレートを使用しているため、すべてのページで.vueを含むファイルを使用しています。接尾辞をコンポーネントとして追加します
最近、会社のプロジェクトが比較的少なくなり、ようやく vue-router を使用した私の小さな経験をいくつか記録する時間ができました
一般的なモバイル ポートの単一ページ アプリケーションには、ページにジャンプするときに対応する遷移アニメーションがあります。
1. 現在の第 1 レベルのページから第 2 レベルのページにジャンプするときに表示する必要がある遷移アニメーションは、第 1 レベルのページが画面の左側に移動して消えるときのものです。 ,
2階層目のページが画面の右から左に移動して表示されます。 (本を次のページにめくったときの効果と似ています)
2. 現在の第 2 レベルのページから第 1 レベルのページに戻るときに表示する必要がある遷移アニメーションは、第 2 レベルのページが表示されるときに表示されます。ページが画面の右側に移動して消えます。
第 1 レベルのページが画面の左から右に移動して表示されます。 (本を前のページに戻す効果) と似ています
しかし、次のような疑問が生じます: 現在のページとジャンプするページの間の階層関係をどのように判断するか?
私の解決策は、ページ(コンポーネント)を作成するときに、定義ページのルーターでページのpath(アクセスパス)属性を設定し、コンポーネント間の階層関係を区別することです。
例えば、第1レベルのページ(コンポーネント)‘A’のアクセスパスは、‘/A’ となります。彼の 2 番目のページ 'B' のアクセス パスは '/A/B' です。
次に、そのページにジャンプする前に、現在のページとジャンプ先のページのパスの深さを比較するだけで済みます。トランジションアニメーションを動的に設定します。
たとえば、深さが '/A/B' > '/A' の場合、B ページから A ページへのジャンプは 効果 2: (turnこの本は前のページに戻ります)。
1 つ。まず親ページ
home.vue:
scoped
.child-view { position: absolute; width: 100%; height: 100%; transition: all .5s ease; -webkit-transition: all .5s ease; -moz-transition: all .5s ease; }
<em><em><em>.rightin-enter,<br/>.leftin-leave-active {<br/> opacity: 0;<br/> transform: translate3d(50% 0, 0);<br/> -webkit-transform: translate3d(50%, 0, 0);<br/> -moz-transform: translate3d(50%, 0, 0);<br/>}<br/><br/>.leftin-enter,<br/>.rightin-leave-active {<br/> opacity: 0;<br/> transform: translate3d(-50% 0, 0);<br/> -webkit-transform: translate3d(-50%, 0, 0);<br/> -moz-transform: translate3d(-50%, 0, 0);<br/>}<br/><br/><span style="color: #0000ff;"></style></span></em></em></em>
2 つ。次に、main.js フラグメント (ページにジャンプする前に遷移アニメーションを動的に設定するために使用) を添付します
main.js:
//进入路由之前设置拦截器let noLoginList = ["login", "register", "forget", "home", "classify", "goodsDetial"]; router.routeInfo.beforeEach((to, from, next) => { let user = sessionStorage.getItem('user'); //如果要去登录页面 if (noLoginList.indexOf(to.name) >= 0) { if (!user || user == '') { //未登录的状态通行 next(); return; } else { if (["login", "register", "forget"].indexOf(to.name) >= 0) { //已登录的状态去首页 next({ name: 'home' }); return; } else { //已登录的状态去首页 next(); return; } } } else { //去登录页面以外的页面(以下是本文关键代码) if (user && user != '') { //判断是否为需要缓存组件,如果是添加组件名到数组 if (to.meta.keepAlive) { const toName = to.name; let keepLi = store.getters.getKeepAlList; keepLi.indexOf(toName) < 0 ? keepLi.push(toName) : ''; store.commit('SET_KEEPALLIST', keepLi); } //根据路径名深度设置转场动画类型 store.commit('SET_TRANSNA', (to.path.split('/').length < from.path.split('/').length ? 'leftin' : 'rightin')); next(); } else { let toWhere = router.nameList.indexOf(to.name) >= 0 ? to : {name: 'home'}; next({ name: 'login', params: { jumpTo: { name: toWhere.name, params: toWhere.params, query: toWhere.query, }, } }); } } });
以上がvue-routeを使用して左右のページめくりのトランジションアニメーションを自動決定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。