얼마전에 모바일 스파 프로젝트를 만들었습니다. 기술 기반은 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) : ''; 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, }, } }); } } });
관련 권장 사항:
jquery는 키보드 왼쪽 및 오른쪽 페이지 넘김 효과를 실현합니다_jquery
Vue 라우터는 jquery와 params를 사용하여 매개변수를 세부적으로 전달합니다.
Vue 라우터 라우팅 매개변수가 새로 고쳐지고 사라지는 문제에 대한 솔루션
위 내용은 왼쪽 및 오른쪽 페이지 넘기기 전환 애니메이션을 자동으로 판단하는 Vue Router 효과 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!