加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

Vue实现移动端页面切换效果

发布时间:2020-12-14 23:57:33 所属栏目:资源 来源:网络整理
导读:找了好多博客实现效果都……emmm…… 应用Vue自带的过渡 《??》和 嵌套路由 和 fixed定位实现 其实还是挺简单的。 在子页面把整个页面做绝对定位,覆盖整个屏幕,子父页面将? ?用? ?套起来,并加上过渡动画就可以啦。 代码: Document 下一层 第一层 span st

找了好多博客实现效果都……emmm……

应用Vue自带的过渡 《??》和 嵌套路由 和 fixed定位实现

其实还是挺简单的。

在子页面把整个页面做绝对定位,覆盖整个屏幕,子父页面将??用??套起来,并加上过渡动画就可以啦。

代码:

Document 下一层 第一层

<span style="color: #0000ff;"><<span style="color: #800000;">script <span style="color: #ff0000;">src<span style="color: #0000ff;">="https://unpkg.com/vue/dist/vue.js"<span style="color: #0000ff;">></<span style="color: #800000;">script<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">script <span style="color: #ff0000;">src<span style="color: #0000ff;">="https://unpkg.com/vue-router/dist/vue-router.js"<span style="color: #0000ff;">></<span style="color: #800000;">script<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">script<span style="color: #0000ff;">><span style="background-color: #f5f5f5; color: #000000;">
const Foo <span style="background-color: #f5f5f5; color: #000000;">=<span style="background-color: #f5f5f5; color: #000000;"> {
template: </span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;div class</span><span style="background-color: #f5f5f5; color: #000000;"&gt;=</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;whole-page two</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router</span><span style="background-color: #f5f5f5; color: #000000;"&gt;-</span><span style="background-color: #f5f5f5; color: #000000;"&gt;link to</span><span style="background-color: #f5f5f5; color: #000000;"&gt;=</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/foo/bar</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span><span style="background-color: #f5f5f5; color: #000000;"&gt;下一层</span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router-link></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router</span><span style="background-color: #f5f5f5; color: #000000;"&gt;-</span><span style="background-color: #f5f5f5; color: #000000;"&gt;link to</span><span style="background-color: #f5f5f5; color: #000000;"&gt;=</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span><span style="background-color: #f5f5f5; color: #000000;"&gt;返回</span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router-link></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;h1</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span><span style="background-color: #f5f5f5; color: #000000;"&gt;第二层</span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;h1></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;transition</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router</span><span style="background-color: #f5f5f5; color: #000000;"&gt;-</span><span style="background-color: #f5f5f5; color: #000000;"&gt;view</span><span style="background-color: #f5f5f5; color: #000000;"&gt;><</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router-view></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;transition></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;div></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;
}
const Bar <span style="background-color: #f5f5f5; color: #000000;">=<span style="background-color: #f5f5f5; color: #000000;"> {
template: </span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;div class</span><span style="background-color: #f5f5f5; color: #000000;"&gt;=</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;whole-page three</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router</span><span style="background-color: #f5f5f5; color: #000000;"&gt;-</span><span style="background-color: #f5f5f5; color: #000000;"&gt;link to</span><span style="background-color: #f5f5f5; color: #000000;"&gt;=</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/foo</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span><span style="background-color: #f5f5f5; color: #000000;"&gt;返回</span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router-link></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;h1</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span><span style="background-color: #f5f5f5; color: #000000;"&gt;第三层</span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;h1></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;transition</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router</span><span style="background-color: #f5f5f5; color: #000000;"&gt;-</span><span style="background-color: #f5f5f5; color: #000000;"&gt;view</span><span style="background-color: #f5f5f5; color: #000000;"&gt;><</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router-view></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;transition></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;div></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;
}
const routes <span style="background-color: #f5f5f5; color: #000000;">=<span style="background-color: #f5f5f5; color: #000000;"> [
{ path: <span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">/foo<span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">,component: Foo,children: [ { path: <span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">bar<span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">,component: Bar } ] }
]
const router <span style="background-color: #f5f5f5; color: #000000;">= <span style="background-color: #f5f5f5; color: #0000ff;">new<span style="background-color: #f5f5f5; color: #000000;"> VueRouter({ routes })
const app <span style="background-color: #f5f5f5; color: #000000;">= <span style="background-color: #f5f5f5; color: #0000ff;">new<span style="background-color: #f5f5f5; color: #000000;"> Vue({ router }).$mount(<span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">#app<span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">)
<span style="color: #0000ff;"></<span style="color: #800000;">script<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">html<span style="color: #0000ff;">>

效果:

有一个问题需要注意一下,

我们知道,在应用transform属性的时候,fixed定位会变成absolute。

这里,页面转换的时候,就变成了相对translation定位。所以如果子页面中有绝对定位的话,移动的过程中页面会变形。

简单举个栗子,

Document 我是一个标题 下一层 第一层

<span style="color: #0000ff;"><<span style="color: #800000;">script <span style="color: #ff0000;">src<span style="color: #0000ff;">="https://unpkg.com/vue/dist/vue.js"<span style="color: #0000ff;">></<span style="color: #800000;">script<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">script <span style="color: #ff0000;">src<span style="color: #0000ff;">="https://unpkg.com/vue-router/dist/vue-router.js"<span style="color: #0000ff;">></<span style="color: #800000;">script<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">script<span style="color: #0000ff;">><span style="background-color: #f5f5f5; color: #000000;">
const Foo <span style="background-color: #f5f5f5; color: #000000;">=<span style="background-color: #f5f5f5; color: #000000;"> {
template: </span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;div class</span><span style="background-color: #f5f5f5; color: #000000;"&gt;=</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;whole-page two</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router</span><span style="background-color: #f5f5f5; color: #000000;"&gt;-</span><span style="background-color: #f5f5f5; color: #000000;"&gt;link to</span><span style="background-color: #f5f5f5; color: #000000;"&gt;=</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span><span style="background-color: #f5f5f5; color: #000000;"&gt;返回</span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router-link></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;header</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span><span style="background-color: #f5f5f5; color: #000000;"&gt;我也是一个标题</span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;header></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;h1</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span><span style="background-color: #f5f5f5; color: #000000;"&gt;第二层</span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;h1></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;transition</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router</span><span style="background-color: #f5f5f5; color: #000000;"&gt;-</span><span style="background-color: #f5f5f5; color: #000000;"&gt;view</span><span style="background-color: #f5f5f5; color: #000000;"&gt;><</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router-view></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;transition></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;div></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;
}
const routes <span style="background-color: #f5f5f5; color: #000000;">=<span style="background-color: #f5f5f5; color: #000000;"> [
{ path: <span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">/foo<span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">,component: Foo }
]
const router <span style="background-color: #f5f5f5; color: #000000;">= <span style="background-color: #f5f5f5; color: #0000ff;">new<span style="background-color: #f5f5f5; color: #000000;"> VueRouter({ routes })
const app <span style="background-color: #f5f5f5; color: #000000;">= <span style="background-color: #f5f5f5; color: #0000ff;">new<span style="background-color: #f5f5f5; color: #000000;"> Vue({ router }).$mount(<span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">#app<span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">)
<span style="color: #0000ff;"></<span style="color: #800000;">script<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">html<span style="color: #0000ff;">>

看下效果:

OKOK,反正就是这种bug嘛。

解决办法就是,就是,尽量让页面fixed定位都是0 0 0 0,然后偏移用padding实现。

大概吧……反正我是这么解决的……

比如上面那个可以把CSS改成这样解决问题。

{:;:; }{:;:; }{:; }{:;:;}{:;:;:;:;:;:;:; }{:; }{:; }{:;:;:;:;:;:;:;:;:; }{:;:; }

嗯嗯 还有一个问题,还有个滑动穿透的问题,(真开心! 这么多问题!

我再举个栗子,

下一层 第一层<第一层<第一层<第一层<第一层 第一层<第一层<第一层<第一层<第一层 第一层<第一层<第一层<第一层<第一层

<span style="color: #0000ff;"><<span style="color: #800000;">script <span style="color: #ff0000;">src<span style="color: #0000ff;">="https://unpkg.com/vue/dist/vue.js"<span style="color: #0000ff;">></<span style="color: #800000;">script<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">script <span style="color: #ff0000;">src<span style="color: #0000ff;">="https://unpkg.com/vue-router/dist/vue-router.js"<span style="color: #0000ff;">></<span style="color: #800000;">script<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">script<span style="color: #0000ff;">><span style="background-color: #f5f5f5; color: #000000;">
const Foo <span style="background-color: #f5f5f5; color: #000000;">=<span style="background-color: #f5f5f5; color: #000000;"> {
template: </span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;div class</span><span style="background-color: #f5f5f5; color: #000000;"&gt;=</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;whole-page two</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router</span><span style="background-color: #f5f5f5; color: #000000;"&gt;-</span><span style="background-color: #f5f5f5; color: #000000;"&gt;link to</span><span style="background-color: #f5f5f5; color: #000000;"&gt;=</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;"</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span><span style="background-color: #f5f5f5; color: #000000;"&gt;返回</span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router-link></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;h1</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span><span style="background-color: #f5f5f5; color: #000000;"&gt;第二层</span><span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;h1></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;transition</span><span style="background-color: #f5f5f5; color: #000000;"&gt;></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router</span><span style="background-color: #f5f5f5; color: #000000;"&gt;-</span><span style="background-color: #f5f5f5; color: #000000;"&gt;view</span><span style="background-color: #f5f5f5; color: #000000;"&gt;><</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;router-view></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;transition></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;<</span><span style="background-color: #f5f5f5; color: #000000;"&gt;/</span><span style="background-color: #f5f5f5; color: #000000;"&gt;div></span> <span style="background-color: #f5f5f5; color: #000000;"&gt;
}
const routes <span style="background-color: #f5f5f5; color: #000000;">=<span style="background-color: #f5f5f5; color: #000000;"> [
{ path: <span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">/foo<span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">,component: Foo }
]
const router <span style="background-color: #f5f5f5; color: #000000;">= <span style="background-color: #f5f5f5; color: #0000ff;">new<span style="background-color: #f5f5f5; color: #000000;"> VueRouter({ routes })
const app <span style="background-color: #f5f5f5; color: #000000;">= <span style="background-color: #f5f5f5; color: #0000ff;">new<span style="background-color: #f5f5f5; color: #000000;"> Vue({ router }).$mount(<span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">#app<span style="background-color: #f5f5f5; color: #000000;">'<span style="background-color: #f5f5f5; color: #000000;">)
<span style="color: #0000ff;"></<span style="color: #800000;">script<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">html<span style="color: #0000ff;">>

看效果,第二页的高度明明就是视窗的高度,但是它有一个滚动条,实际上那是第一个页面的滚动条。

网上找了好多方法,一一试了,全部不生效。(当然很有可能是我的方法不对。

最后没办法只有找最笨的方法啦,就是通过??? 把父页面不显示就好了。

当然不能直接不显示,因为动画还没结束父元素就空白了呀!setTimeout 就好了……

具体代码就不写了,这个应该很容易理解。

还有什么问题,等我想起来在补充。或者还有什么没注意到的问题,欢迎路过的大佬们提出呀,反正我也解决不了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读