这篇文章将为大家详细讲解有关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,每隔一定时间修改一次数据属性,这样看起来就不是突然变化的。