얼마전에 모바일 스파 프로젝트를 만들었습니다. 기술은 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('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 중국어 웹사이트의 기타 관련 기사를 참조하세요!