>  기사  >  웹 프론트엔드  >  왼쪽 및 오른쪽 페이지 넘기기 전환 애니메이션을 자동으로 판단하는 Vue Router 효과 구현 방법

왼쪽 및 오른쪽 페이지 넘기기 전환 애니메이션을 자동으로 판단하는 Vue Router 효과 구현 방법

小云云
小云云원래의
2018-01-25 11:47:302454검색

얼마전에 모바일 스파 프로젝트를 만들었습니다. 기술 기반은 vue-cli scaffolding의 webpack 템플릿을 사용하기 때문에 모든 페이지에서 .vue 접미사가 붙은 파일을 사용합니다. 이 기사에서는 주로 vue 라우터가 왼쪽 및 오른쪽 페이지 넘기기 전환 애니메이션의 효과를 자동으로 결정하는 방법을 공유합니다.

최근에는 회사에 프로젝트가 상대적으로 적었고 마침내 vue-router를 사용한 나의 작은 경험을 기록할 시간이 생겼습니다.

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

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

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

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

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

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

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

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

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

예를 들어 '/A/B' 깊이 > '/A' 깊이인 경우 B 페이지에서 A 페이지로 이동하는 경우 효과 2가 되어야 합니다. (책을 이전 페이지로 되돌리는 효과) .

一. 먼저 상위 페이지

home.vue:

<!-- keepAlList是用来动态判断组件是否需要keep-alive,建议保存到vuex中作为全局变量,至于下方的css动画,看官可以按照喜好自由修改-->
<transition :name="transNa">
 <keep-alive :include="keepAlList">
 <router-view class="child-view"></router-view>
 </keep-alive>
</transition>
<style scoped>
.child-view {
 position: absolute;
 width: 100%;
 height: 100%;
 transition: all .5s ease;
 -webkit-transition: all .5s ease;
 -moz-transition: all .5s ease;
}
.rightin-enter,
.leftin-leave-active {
 opacity: 0;
 transform: translate3d(50% 0, 0);
 -webkit-transform: translate3d(50%, 0, 0);
 -moz-transform: translate3d(50%, 0, 0);
}
.leftin-enter,
.rightin-leave-active {
 opacity: 0;
 transform: translate3d(-50% 0, 0);
 -webkit-transform: translate3d(-50%, 0, 0);
 -moz-transform: translate3d(-50%, 0, 0);
}
</style>

two. 두 번째로, 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) : &#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: 'home'};
   next({
    name: 'login',
    params: {
     jumpTo: {
      name: toWhere.name,
      params: toWhere.params,
      query: toWhere.query,
     },
    }
   });
  }
 }
});

관련 권장 사항:

jquery는 키보드 왼쪽 및 오른쪽 페이지 넘김 효과를 실현합니다_jquery

Vue 라우터는 jquery와 params를 사용하여 매개변수를 세부적으로 전달합니다.

Vue 라우터 라우팅 매개변수가 새로 고쳐지고 사라지는 문제에 대한 솔루션

위 내용은 왼쪽 및 오른쪽 페이지 넘기기 전환 애니메이션을 자동으로 판단하는 Vue Router 효과 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.