当前位置: 首页 > Web前端 > HTML5

超酷的转场动画?CSS轻松搞定!

时间:2023-04-05 01:33:49 HTML5

在WeGame的PC官网首页,有很多制作精良的基于滚动的动画效果。这里我简单截取两个比较有意思的转场动画给大家感受一下。转场动画1:转场动画2:是不是很有趣?整个动画的连接是基于滚轮的滚动来触发的。我的猜测是使用像TweenMaxJS这样的动画库来实现它。当然,这两个很酷很有趣的过渡动画,可以根据最新的CSS@scroll-timeline规范大致实现。本文将尝试使用纯CSS来模拟以上两种转场动画。当然,关于最新的CSS@scroll-timeline规范,如果你还没有详细看过,可以先看看我的文章。来了,终于来了,动画杀手@scroll-timeline转场动画1首先我们来看一下这个动画:核心步骤拆解:场景一,然后借助WeGame的LOGO,LOGO开始放大,LOGO放大到一定程度,开始淡出,LOGO后面的场景2逐渐淡入,LOGO放大到淡出消失,场景2在这里完全出现。整个动画的实现,有一个很重要的场景,就是要能够使用LOGO元素,切掉背景,只能看到LOGO后面的元素,像这样得到一张图:注意,图片白色部分的,不是白色的,但需要透明才能显示其背后的元素。当然,我们可以让UI裁剪出这样的图片,但毕竟太麻烦了。假设我们只有一个LOGO元素:怎么用这个LOGO来切背景呢?Cutbackgroundwithmask和mask-composite是的,我们可以在这里使用mask。我们来试试看:

div{background:linear-gradient(-75deg,#715633,#2b2522);}假设我们有这样一个背景:我们以LOGO图作为MASK进行Cut:div{背景:线性渐变(-75deg,#715633,#2b2522);mask:url(WeGame-LOGO图片.png);掩码重复:不重复;mask-position:centercenter;}我们会得到这样一张图:哦不,这和我们想象的刚好相反。我们要的是LOGO是透明的,其余的背景保留。怎么做?不要慌,这里可以使用我们上一篇介绍的-webkit-mask-composite。不太了解的可以点此查看:高级裁剪技巧!基于单张图片的任意颜色转换,我们简单修改一下代码:div{background:linear-gradient(-75deg,#715633,#2b2522);掩码:url(//wegame.gtimg.com/g.55555-r.c4663/wegame-home/sc01-logo.52fe03c4.svg),线性渐变(#fff,#fff);掩码重复:不重复;遮罩位置:中心中心;-webkit-mask-composite:xor;}这样,我们就可以成功得到这样一个图形:当然,这里需要注意的是白色区域不是白色的,而是透明的,可以显露出后面的内容。配合@scroll-timeline就好了。这样,在上面的裁剪层的基础上,再配合@scroll-timeline,我们来模拟一个基本的动画效果:
.g-scroll{位置:相对;宽度:100vw;高度:500vh;}.g-wrap{位置:固定;顶部:0;左:0;宽度:100vw;高度:100vh;溢出:隐藏;}.g-容器{位置:绝对;顶部:0;左:0;宽度:100vw;高度:100vh;动画名称:比例;动画持续时间:10s;animation-timeline:box-move;}.g-bg{position:fixed;宽度:100vw;高度:100vh;background:url(LOGO后面的图层);}.g-wegame{position:absolute;宽度:100vw;高度:100vh;背景:线性渐变(-75deg,#715633,#2b2522);掩码:网址(//wegame.gtimg.com/g.55555-r.c4663/wegame-home/sc01-logo.52fe03c4.svg),线性渐变(#fff,#fff);掩码重复:不重复;mask-位置:center中心;-webkit-mask-composite:xor;}@scroll-timelinebox-move{source:selector("#g-scroll");方向:“垂直”;}@keyframesscale{0%{transform:scale(1);}100%{转换:比例(60);}}在这里,为了看懂上面的代码,你必须掌握基本的CSS@scroll-timeline语法以及剩下的内容,简单说明一下:我们在LOGO后面的层中,使用.g-bg来使用一个图片表示场景2#g-scroll用于基于滚动条的滚动,实现滚动动画。在g-wegame中,实现了上面提到的使用mask和mask-composite层就好了。此时,当我们向下滚动动画时,就会触发.g-container的动画,即从transform:scale(1)到transform:scale(60),我们来看看效果:是一个有点像那样。但是,这里缺少一些细节。首先,我们需要有一个LOGO。它的透明度从1逐渐变淡到0,这个比较简单。添加后我们看一下效果:离目标又近了一步,但是仔细观察原效果,还是少了一层:在LOGO淡出的过程中,后面的背景不是直接呈现,但有一个淡出的过程。所以,为了完整起见,动画过程一共有4层:所以,完整的代码大概是这样的:.g-scroll{位置:相对;宽度:100vw;高度:500vh;}.g-wrap{位置:固定;顶部:0;左:0;宽度:100vw;高度:100vh;溢出:隐藏;}.g-容器{位置:绝对;顶部:0;左:0;宽度:100vw;高度:100vh;动画名称:比例;动画持续时间:10s;animation-timeline:box-move;}.g-bg{position:fixed;宽度:100vw;高度:100vh;background:url(//背景图片,场景2);}.g-wegame{position:absolute;宽度:100vw;高度吨:100vh;背景:线性渐变(-75deg,#715633,#2b2522);mask:url(//WeGame-Logo.png),linear-gradient(#fff,#fff);掩码重复:不重复;遮罩位置:中心中心;-webkit-mask-composite:xor;z-index:1;}.g-mask{position:aboslute;宽度:100vw;高度:100vh;背景:线性渐变(-75deg,#715633,#2b2522);z-指数:2;动画名称:reOpacityChange;动画持续时间:10s;动画时间轴:框移动;animation-function-timing:linear;}.g-logo{position:absolute;背景:url(//WeGame-Logo.png);背景重复:不重复;背景位置:中心中心;z-指数:3;动画名称:reOpacityChange;动画持续时间:10s;animation-timeline:box-move;}@scroll-timelinebox-move{source:selector("#g-scroll");方向:“垂直”;}@keyframesreOpacityChange{0%,50%{不透明度:1;}100%{不透明度:0;}}@keyframesscale{0%{transform:scale(1);}100%{转换:比例(60);}}这样,我们就可以基本还原原来的效果了:完整代码,可以戳这里:CodePenDemo-WeGameAnimationDemo过渡动画2好了,搞定一个,我们继续下一个:这里,我们也简单拆解动画:数码变焦,逐渐带出场景2,场景2有很炫酷的光影收缩效果这里的数码变焦其实和第一个转场动画很像,就不细说了。来看看场景2中的光影收缩效果是如何实现的,这里看似负责,其实很简单。这里,核心就在于这两张图:图片素材1:注意这里最重要的是图片中的白色不是白色,而是透明的,可以显露背景的内容。这样,我们只需要在这张图后面再放一张图:你想到了吗?没错,就是让这张图从一个比较大的transform:scale()值变成一个比较小的transform:scale()值!这意味着什么?看这张图你就明白了:知道了这些,整个动画就比较简单了。当然这里我们也使用CSS@scroll-timeline来完成整个动画:30.g-scroll{位置:相对;宽度:100vw;高度:500vh;}.g-容器{位置:固定;顶部:0;左:0;宽度:100vw;高度:100vh;绝对;顶部:0;左:0;宽度:100%;高度:100%;背景:url(//蜂巢图片.png);z-index:1;}.g-circle{位置:绝对;顶部:50%;左:50%;变换:平移(-50%,-50%)比例(.5);宽度:400px;高度:400px;背景:url(//光圈图像.png);动画名称:比例;动画持续时间:10s;animation-timeline:box-move;}.g-word{position:absolute;顶部:50%;离开吨:50%;转换:翻译(-50%,-50%);字体大小:12vw;z-指数:10;颜色:透明;背景:线性渐变(#f8a011,#ffd973);:文本;动画名称:scaleWord;动画持续时间:10s;animation-timeline:box-move;}@scroll-timelinebox-move{source:selector("#g-scroll");方向:“垂直”;}@keyframesscale{0%{transform:translate(-50%,-50%)scale(10);}100%{变换:平移(-50%,-50%)比例(.5);}}@keyframesscaleWord{0%{transform:translate(-50%,-50%)scale(.5);}100%{transform:translate(calc(-50%-5000px),-50%)scale(100);}}整个动画需要看懂,但其实做效果还是需要有一定基础的:完整代码,可以点这里:CodePenDemo-WeGameAnimationDemo这样,借助强大的CSS和一些有趣的技巧,我们用纯CSS实现了这两个看似很复杂的过渡动画效果,这在以前用纯CSS是完全不可能实现的。最后,本文到此结束,希望对你有所帮助:)更多精彩的CSS技术文章汇总在我的Github——iCSS,持续更新中。欢迎点个星订阅收藏。有什么问题或者建议可以多交流。原创文章文笔有限,知识匮乏。如果文章中有任何不准确的地方,请告诉我。