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

英雄联盟玩家六点星能力图动画是怎么制作的?

时间:2023-04-05 18:57:40 HTML5

最近在看一场LPL比赛的时候,看到了这么一个有趣的卦象动画:今天我们就用纯CSS来实现这样的动画效果!实现背景网格对于像下面这样的背景网格,最好的办法当然是裁剪图片。如果一定要用CSS,勉强可以做到。这涉及不规则图形边框的效果。我们有一些方法可以实现它。可以参考这些文章:现代CSS进阶技巧,不规则边框的解决方法很有趣!这里,我们可以使用drop-shadow()来大致实现这个效果。核心步骤:通过叠加实现一个六边形图形,使用drop-shadow()实现边框效果。这是代码:

div{position:relative;宽度:150px;高度:260px;背景:#fff;过滤器:阴影(00.5px#333)阴影(00.5px#333)阴影(00.5px#333);&::before,&::after{内容:“”;位置:绝对;插图:0;背景:继承;}&::before{变换:旋转(60度);}&::after{变换:旋转(-60deg);}}效果如下:只需要叠加几次,用3条直线,就可以快速绘制出整个背景,完整的代码,用SASS表示如下:
  • .g-container{位置:相对;宽度:300px;高度:300px;}.g-bg{位置:绝对;插图:0;&::之后{内容:“”;位置:绝对;插图:20px0;z-指数:6;背景:线性渐变(透明,透明计算(50%-.5px),#333计算(50%-.5px),#333计算(50%+.5px),透明计算(50%+.5px),透明)、线性渐变(120deg、透明、透明计算(50%-1px)、#333计算(50%-.5px)、#333计算(50%+.5px)、透明计算(50%+1px),透明),线性渐变(240deg,透明,透明计算(50%-1px),#333计算(50%-.5px),#333计算(50%+.5px),透明计算(50%+1px),透明的);剪辑路径:多边形(25%0%、75%0%、100%50%、75%100%、25%100%、0%50%);}li{--rotate:0deg;位置:绝对;宽度:150px;高度:260px;吨翻译:-50%-50%;左:50%;顶部:50%;背景:#fff;过滤器:投影(00.5px#333)投影(00.5px#333)投影(00.5px#333);&::before,&::after{内容:“”;位置:绝对;插图:0;背景:继承;}&::before{变换:旋转(60度);}&::after{变换:旋转(-60deg);}}@for$i从1到5{li:nth-child(#{$i}){z-index:#{$i};宽度:#{(1-$i/5)*150}px;高度:#{(1-$i/5)*260}像素;}}}背景网格出来了:用背景图实现六角星样式,接下来我们只需要实现六角星渲染加动画实现这样的图形其实很简单,直接用clip-path剪切即可:只需要两步:实现渐变图形和用clip-path剪切核心代码:
    ···div{背景:线性渐变(rgba(241,94,174,.8),rgba(255,152,0,.8));剪辑路径:多边形(25%0%,75%0%,100%50%,75%100%,25%100%,0%50%);}当然我们可以将坐标点作为参数,计算出坐标点后,通过inline标签,可以根据卦象显示不同样式的Pattern。像这样:
    ···div{背景:线性-渐变(rgba(241,94,174,.8),rgba(255,152,0,.8));clip-path:polygon(var(--polygon));}这样可以快速得到不同的图形:完整代码可以点这里:CodePenDemo--LPL选手六角星能力图表动画使用CSS@property实现动画Hover效果最后一步,我们只需要实现Hover动画即可。这里,我们需要借助CSS@property来实现。对CSS@property了解不多的同学可以参考:CSS@property,让不可能成为可能。这实际上是一个饼图动画。首先,让我们实现一个动态饼图动画。假设我们有以下结构:
    .normal{width:200px;高度:200px;边界半径:50%;背景:圆锥渐变(黄绿色,黄绿色25%,透明25%,透明100%);过渡:背景30??0ms;&:hover{背景:圆锥梯度(黄绿色,黄绿色60%,透明60.1%,透明100%);}}会得到这样的效果,因为不支持conic-gradient对于过渡动画,得到的是直接从一帧到另一帧的变化:OK,用CSS@property修改一下:@property--per{语法:'<百分比>';继承:假的;初始值:25%;}div{背景:圆锥梯度(黄绿,黄绿var(--per),透明var(--per),透明100%);过渡:--每300毫秒线性;&:hover{--每:60%;}}看看改造后的效果。借助CSS@property自定义变量,我们可以实现过去无法实现的过渡动画效果:CodePodeDemo--conic-gradient和CSS@property实现饼图动画在DEMO中,我们将使用相同的技术,只不过我们会在蒙版上使用CSS@property自定义变量,通过蒙版的蒙版效果实现Hover过程的显示动画。对mask了解不多的同学可以参考:精彩的CSSMASK。核心代码如下:
    @property--per{语法:'|<角度>';继承:假的;初始值:360deg;}.g-content{position:absolute;插图:20px0;z-指数:10;mask:圆锥梯度(#000,#000var(--per),transparentvar(--per),transparent360deg);&:hover{动画:hoverPie600ms缓入缓出;}&::before{内容:“”;位置:绝对;插图:0;背景:线性渐变(rgba(241,94,174,.8),rgba(255,152,0,.8));剪辑路径:多边形(var(--polygon));}}@keyframeshoverPie{0%{--per:0deg;}100%{--per:360deg;}}这里:我们使用元素的&::before实现了我们上面提到的六角星样式映射。使用元素本身的遮罩和一个CSS的@property属性来实现遮罩动画的整体Hover效果如下:我们将以上所有内容组合起来,得到一个完整的效果:至此,我们已经大致还原了整个效果,撒花!完整代码可以点击这里:CodePenDemo——LPL选手六芒星技能图动图终于制作完成。本文到此结束。希望这篇文章对你有所帮助:)更多精彩的CSS技术文章汇总在我的Github——iCSS,持续更新中。欢迎点个星订阅收藏有什么问题或者建议可以多交流。原创文章文笔有限,知识匮乏。如果文章中有任何不准确的地方,请告诉我。