前端那些花里胡哨的动画效果—Vue移动端页面路由过渡切换

前言


这个寒假准备一边做新项目一边把自己的个人博客重构了,关于移动端一直在想到底是做响应式还是单独写一套,后来扒开自己去年写的博客源码,果断选择重做一套...准备一边做一边找一些比较好的动画分享。


动效来源


https://m.adicw.cn/

准备以这个博客为主,从去年到现在我都在寻找一些好的博客界面设计,目前为止依然是这个大佬做的博客的是我心目中的NO.1,我原始的博客很多过渡动画都是参考它的实现,但是也询问过该大佬博客并不开源,不过F12之后一些动画效果就显而易见了,这次准备边做边总结。


移动端页面反转切换动画


上demo效果图(想看实际效果可以直接访问上面的移动端博客):


分析


整个页面布局分为tabbar和内容区,其tabbar控制路由跳转,核心在于如何借助Vue的transition组件实现路由切换的过渡。去年第一次看到这个效果的时候只能说眼前一黑,虽然translate属性都认识,但就是不知道咋实现出来的,那时候css的水平还比较差,经过一年的沉淀还是可以的。

对于路由页面切换的动画一定要观察其进入、离开的转换效果,不要把它当作一个整体,因为再华丽花哨的东西transition组件的使用依然是遵循着这样的规则

离开变化:1. 原始 -> 缩小 2. 反转 0度 -> 180度,rotateY 3. 透明度 1-> 0

进入变化:1. 缩小-> 原始 2.反转180度 -> 0度 rotateY 3.透明度 0 -> 1


注意大小变化和反转变化是分开的,因此需要使用keyframes实现,同时需要设置绝对定位,这就不做过多解释了,详情可以看vue官方文档的transition上的使用,细节的border变化则是放在过渡的过程当中。


代码


template模板,(keep-alive看自己的需求):

<template>
<div class="app-content">
<div class="app-main">
<router-view v-slot="{ Component }">
<transition name="page">
<keep-alive>
<component :is="Component" />
</keep-alive>
</transition>
</router-view>
</div>
<div class="app-tabbar">
<fs-tab-bar />
</div>
</div>
</template>



css部分(scss)中间动画帧百分比可以按照自己实际动画需求设置:

.app-content {
width: 100vw;
height: 100vh;
background-color: #ccf2f4;
.app-main {
position: relative;
width: 100%;
height: calc(100vh - 65px);
}
}
.page-enter-active {
transition: all 0.4s ease-in-out;
border-radius: 22px;
animation: page-in 1.25s linear;
position: absolute;
left: 0;
top: 0;
}
@keyframes page-in {
0% {
transform: scale(0.92) rotateY(180deg);
opacity: 0;
}

60% {
transform: scale(0.92) rotateY(90deg);
opacity: 0;
z-index: 333;
}
80% {
transform: scale(0.92) rotateY(0);
opacity: 1;
z-index: 999;
}
100% {
transform: scale(1) rotateY(0);
opacity: 1;
z-index: 999;
}
}
@keyframes page-out {
0% {
transform: scale(1) rotateY(0);
opacity: 1;
}
40% {
transform: scale(0.92) rotateY(0);
opacity: 1;
}
80% {
transform: scale(0.92) rotateY(180deg);
opacity: 0;
}
100% {
transform: scale(0.92) rotateY(180deg);
opacity: 0;
}
}




0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
_Async__
作者分享
前端项目分享:Q Maker——仿问卷星低代码项目
25
2023年度总结:我们的生活没有“如果”
69
一个真实二本学院的秋招:停止内耗,接受自己的平庸
94
求职经验分享——两周的求职历程
22
#蓝桥杯# web 今年的蓝桥杯属实是上压力了,作为一名稀有的web组选手(今年我们软院名单上好像就我一个web组,去年两个[捂脸]),按照去年省赛的难度的话压根要不了4个小时,但刚拿到试卷扫了一眼,瞅到了最后两题的名字就感觉难度上来了。 不过前几道题难度确实不是很大,但很明显给人的感觉就是web组的出题更加成熟了,比如没有像去年那种写两行css就a一道题,纯css的题目像还原设计稿就没有了,不过第一道题的grid布局,确实还挺不错的,如果不是后面有个响应式的题用grid布局的代码我就g了,最后比葫芦画瓢也能写的出来。 其次就是个人感觉削弱了JQuery的比重,jQuery虽然也有使用但没有像去年题目那样带来极大的便利,这次我依旧是原生写JS,感觉使不使用差别不是特别大。 只能说有点水平的就是最后两题:markdown解析、树形结构拖拽 markdown的还好,一是看正则基础,二是对于blockquote和ul需要费点功夫,看得出来web组对于正则的要求一直都是有的。 最后一道就有点东西了,个人在上面那道题费了太多时间,最后一道时间明显不太够了只写了送分的那一问。大概看了看应该是原生手写递归组件,之前只用vue写过类似多级评论,递归菜单这样的。虽然原理都一样但是原生还是有点虚,第三问应该就是类似树形结构查找,扁平化删改这样,当时也没仔细看,一会儿扒扒原题再研究研究。 整体来讲还是比较考验基础的,像使用框架的题目分值就那么多,压轴的题永远是看你的原生JS能力。难度确实比去年省赛的题目大,但个人感觉这才是正常的比赛,去年省赛和国赛的难度差别过大反而不太适应,今年听天由命得了,也是最后一次了,可能要捐款了。。
19
下载 APP