css如何实现领积分动画效果

  介绍

这篇文章将为大家详细讲解有关css如何实现领积分动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

最近项目中要做一个领积分的效果,根据老板的描述,这个效果类似于支付宝蚂蚁森林里的领取能量。整体效果是就是在树周围飘着几个积分元素,上下滑动,类似星星闪烁,点击领取后,沿着树中心的位置滑动并消失,树上的能量递增,最后膨胀,变大一点。

<强> 1。整体思路

首先想到基本轮廓是一个地球,周围半圆范围内围绕着好几个闪烁的小星星,然后同时坠落到地球上。用到css定位,border - radius画圆,动画动画,点击动作触发新的动画,积分递增效果类似于countUp.js,但是这里不用这个插件,手动实现。

<强> 1.1半圆围绕效果

这个涉及到数学知识,根据角度得到弧度(弧度=角度*圆周率/180),进而换算成坐标,使积分元素围绕在总积分周围。关键代码如下:

this.integral.forEach(小姐:=祝辞,{   ,,,//,角度转化为弧度   ,,,let  angle =, Math.PI /, 180, *, this.getRandomArbitrary (90,, 270)   ,,,//,根据弧度获取坐标   ,,,i.x =, xAxis  +, 100, *, sin(角)   ,,,i.y =,, 100 +, 100, *, Math.cos(角)   ,,,//,贝塞尔函数   ,,,i.timing =, this.timeFun[方法(this.getRandomArbitrary (0,, 3)))   })

注意getRandomArbitrary()函数的功能是获取随机数,如下:

//,求两个数之间的随机数   getRandomArbitrary(最小值,最大值),{   ,,,return  math . random (), *, (max 安康;分钟),+,最小值;   }

timeFunc是一个贝塞尔函数名称集合,为了实现积分闪烁的效果(上下滑动),定义在数据里:

timeFun:,(& # 39;缓解# 39;,,& # 39;ease-in& # 39;,, & # 39; ease-in-out& # 39;,, & # 39; ease-out& # 39;],,//,贝塞尔函数实现闪烁效果

<>强积1.2分闪烁(上下滑动)

用css动画动画实现积分上下滑动,这里能想到的方式是变换:translateY (5 px),就是在y轴上移动一定的距离,并且动画循环播放。代码如下:

.foo  {   ,,,显示:,flex;   ,,,字体大小:,10 px;   ,,,对齐项目:,中心;   ,,,justify-content:,中心;   ,,,宽度:,30 px;   ,,,身高:,30 px;   ,,,位置:,固定;   ,,,:,0;   ,,,左:,0;   ,,,animation-name:, slideDown;   ,,,/*默认贝塞尔函数*/,,,animation-timing-function:,打发走;   ,,,/*动画时间*/,,,动画:,1500毫秒;   ,,,/*动画循环播放*/,,,animation-iteration-count:,无限;   ,,,-moz-box-shadow:, 5 px  5 px  10 px  3 px  rgb(277,, 102,, 63),插图;   ,,,-webkit-box-shadow:, 5 px  5 px  10 px  3 px  rgb(277,, 102,, 63),插图;   ,,,不必:,5 px  5 px  10 px  3 px  rgb(277,, 102,, 63),插图;   }/*小积分上下闪烁*/@keyframes  slideDown  {   ,,,,得到{   ,,,,,,,变换:,translateY (0);   ,,,}   ,,,50%,{   ,,,,,,,变换:,translateY (5 px);   ,,,,,,,背景颜色:,rgb (255,, 234,, 170);   ,,,}   ,,,用{   ,,,,,,,变换:,translateY (0);   ,,,,,,,背景:,rgb (255,, 202,, 168);   ,,,}   }

注意,我这里除了让积分上下移动,还让让它背景色跟着变化。上下移动的步调不能一致,不然看起来很呆板,所以要使用随机数函数在贝塞尔函数中随机选取一个,让积分小球上下滑动看起来是参差不齐的。关键代码如下:

/* */html   & lt; div :类=癷ntegralClass"   ,,,,)=癷tem 拷贝integral"   ,,,,:data-angle=癷tem.angle"   ,,,,:风格=皗,左:item.x  +, & # 39; px # 39;,,:, item.y  +, & # 39; px # 39;,, animationTimingFunction:, item.timing}“在{{item.value}}   & lt;/div>/* js *///,数据中定义   timeFun:[& # 39;缓解# 39;,,& # 39;ease-in& # 39;,, & # 39; ease-in-out& # 39;,, & # 39; ease-out& # 39;],,//,贝塞尔函数实现闪烁效果//,随机获取贝塞尔函数   i.timing =, this.timeFun[方法(this.getRandomArbitrary (0,, 3)))

<强> 1.3总积分递增效果

点击领取之后积分,总积分要累加起来,这个类似countUp.js的效果,但是这里不能为了这一个功能引用这个插件。项目是使用vue。js,很容易就想到修改数据的响应式属性让数字变化,关键是如何让这个变化不是一下就变过来,而是渐进的。我这里思路是承诺+ setTimeout,每隔一定时间修改一次数据属性,这样看起来就不是突然变化的。

css如何实现领积分动画效果