vue-route를 사용하여 왼쪽 및 오른쪽 페이지 넘김 전환 애니메이션을 자동으로 결정하는 방법

一个新手
풀어 주다: 2017-10-12 10:05:37
원래의
2230명이 탐색했습니다.

 얼마전에 모바일 스파 프로젝트를 만들었습니다. 기술은 vue + vue-router + vuex + mint-ui

vue-cli 스캐폴딩의 webpack 템플릿을 사용하기 때문에 모든 페이지에서는 .vue 파일을 사용합니다.

최근 회사에서는 상대적으로 적은 수의 프로젝트를 진행하여 마침내 vue-router를 사용한 나의 작은 경험을 기록할 시간을 갖게 되었습니다.

일반 모바일 포트 단일 페이지 애플리케이션에는 페이지로 이동할 때 해당 전환 애니메이션이 있습니다. , 예:

  1. 현재 1단계 페이지에서 2단계 페이지로 점프할 때 표시해야 할 전환 애니메이션은 1단계 페이지가 화면 왼쪽으로 이동하여 사라질 때입니다. ,

   2단계 페이지가 화면 오른쪽에서 왼쪽으로 이동하면서 나타납니다. (책을 다음 페이지로 넘기는 효과와 유사)

  2. 현재 2단계 페이지에서 1단계 페이지로 되돌아갈 때 표시해야 할 전환 애니메이션은 2단계 페이지로 넘어갈 때입니다. 페이지가 화면 오른쪽으로 이동했다가 사라지고,

화면 왼쪽에서 오른쪽으로 이동하면서 1단계 페이지가 나타납니다. (책을 이전 페이지로 되돌리는 효과)

와 유사하지만 질문이 생깁니다. 현재 페이지와 이동할 페이지 간의 계층적 관계를 어떻게 결정합니까?

제가 해결한 방법은 페이지(컴포넌트)를 생성할 때 정의 페이지의 router에 페이지의 path(액세스 경로) 속성을 설정하여 컴포넌트 간의 계층 관계를 구분하는 것입니다.

예를 들어 1단계 페이지(컴포넌트) 'A'의 액세스 경로는 '/A' 입니다. 그의 보조 페이지 'B' 의 액세스 경로는 '/A/B' .

입니다. 그런 다음 해당 페이지로 이동하기 전에 현재 페이지와 이동할 페이지의 경로 깊이만 비교하면 됩니다. 동적으로 전환 애니메이션을 설정합니다.

예를 들어, 깊이가 '/A/B' > '/A' 인 경우 B 페이지에서 A 페이지로 점프하는 것은 효과 2: (회전 책을 이전 페이지로 되돌립니다).

One. 먼저 상위 페이지

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>
로그인 후 복사

two. 둘째, 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!