在用vue仿写B站的组件切换效果。
效果:iphone上B站App中,从B站app首页点击一个视频,进入【视频播放页】,点击【视频播放页】中up主的头像,进入【up主的主页】,然后点击【up主的主页】中的视频,又显示【视频播放页】,然后就可以在【视频播放页】 ⇆ 【up主的主页】之间无限的进行下去。
显示新页面时并没有覆盖前面已显示的页面,而是从右侧滑动显示盖在当前页面上。因此我最初是写成嵌套路由
routes: [
{
path: '/',
component: () => import('@/views/index.vue'), // B站首页
children: [
{
path: 'video/:videoId/',
component: () => import('@/views/Video.vue'), // 视频播放页
children: [
{
path: 'up/:upId',
component: () => import('@/views/Up.vue'), // up主的个人主页
}
]
}
]
},
]
'/' --> B站首页
'/video/2342' --> 视频播放页
'/video/2342/up/353' --> up主的个人主页
问题是,当路由是'/video/2342/up/353'显示了up主的个人主页的个人主页时,我继续点击视频进入视频播放页时的路由该怎么设置呢。从app上的效果来看,似乎是个无限的嵌套路由,可我没法把路由配置成无限进行下去啊。如果不是嵌套路由的话当然好解决了,只用一个<router-view>,每显示新组件都把前面的组件覆盖就行了,但那样又没法实现显示的新页面是盖在前面的组件上的效果。
希望有了解的前辈能提供点思路。
其实就是一个平级的路由模式,也就是这样的一个路由结构:
至于你说的
显示新页面时并没有覆盖前面已显示的页面,而是从右侧滑动显示盖在当前页面上
这块其实就是Vue提供的Transition
功能,包裹在<router-view>
组件外部即可。👉 Transition | Vue.js。可以多学习一些其他项目的路由设计,
Transition
的部分可以在社区里面搜索 “Vue过渡与动画” 这个关键词学习。比如说 👉 Vue 教程第九篇 —— 动画和过度效果