ホームページ  >  記事  >  ウェブフロントエンド  >  vue-routeを使用して左右のページめくりのトランジションアニメーションを自動決定する方法

vue-routeを使用して左右のページめくりのトランジションアニメーションを自動決定する方法

一个新手
一个新手オリジナル
2017-10-12 10:05:372197ブラウズ

少し前にモバイルスパプロジェクトを作りました。技術は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(&#39;user&#39;);  //如果要去登录页面
  if (noLoginList.indexOf(to.name) >= 0) {    if (!user || user == &#39;&#39;) {      //未登录的状态通行      next();      return;
    } else {      if (["login", "register", "forget"].indexOf(to.name) >= 0) {        //已登录的状态去首页        next({
          name: &#39;home&#39;
        });        return;
      } else {        //已登录的状态去首页        
      next();        
      return;
      }
    }
  } else {    //去登录页面以外的页面(以下是本文关键代码)
    if (user && user != &#39;&#39;) {      //判断是否为需要缓存组件,如果是添加组件名到数组
      if (to.meta.keepAlive) {
        const toName = to.name;
        let keepLi = store.getters.getKeepAlList;
        keepLi.indexOf(toName) < 0 ? keepLi.push(toName) : &#39;&#39;;
        store.commit(&#39;SET_KEEPALLIST&#39;, keepLi);
      }      //根据路径名深度设置转场动画类型
      store.commit(&#39;SET_TRANSNA&#39;, (to.path.split(&#39;/&#39;).length < from.path.split(&#39;/&#39;).length ? &#39;leftin&#39; : &#39;rightin&#39;));
      next();
    } else {
      let toWhere = router.nameList.indexOf(to.name) >= 0 ? to : {name: &#39;home&#39;};
      next({
        name: &#39;login&#39;,
        params: {
          jumpTo: {
            name: toWhere.name,
            params: toWhere.params,
            query: toWhere.query,
          },
        }
      });
    }
  }
});

以上がvue-routeを使用して左右のページめくりのトランジションアニメーションを自動決定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。