jquery.countup.js是一款轻量级jquery数字动画插件。该数字动画插件可以在页面滚动时,将指定的数字从0开始计数增加动画。
该数字动画插件可以控制动画的延迟时间和动画过渡时间。它依赖于Waypoints插件来监听滚动事件。
安装
可以通过npm或bower来安装jquery.countup.js插件。
npm install jquery.countup.js bower install jquery.countup.js
在页面引入jquery,jquery.waypoints.min.js和jquery.countup.min.js文件。
<script src="jquery.min.js"></script> <script src="jquery.waypoints.min.js"></script> <script src="jquery.countup.min.js"></script>
HTML结构
使用<span>元素作为数字的容器。
<span class="counter">1,498,547.00</span> <span class="counter">7.99</span> <span class="counter">1455455</span>
你也可以使用data-counter-time和data-counter-delay属性来设置数字动画的动画时间和延迟时间。
<span class="counter" data-counter-time="5000" data-counter-delay="50">1981</span> <span class="counter" data-counter-time="100" data-counter-delay="20">9842</span>
初始化插件
在页面DOM元素加载完毕之后,可以通过countUp()方法来初始化数字动画。
$('.counter').countUp();
也可以在初始化的时候传入配置参数。
$('.counter').countUp({ delay: 10, time: 2000 });
delay:每个数字动画的延迟时间,单位毫秒。
time:计数动画总的持续时间。
jquery.countup.min.js 中
var f = function() { e.text(e.data("counterup-nums").shift()), e.data("counterup-nums").length ? setTimeout(e.data("counterup-func"), a) : (e.data("counterup-nums"), e.data("counterup-nums", null), e.data("counterup-func", null)) }
改为
var f = function() { if (e.data('counterup-nums')) { e.text(e.data("counterup-nums").shift()), e.data("counterup-nums").length ? setTimeout(e.data("counterup-func"), a) : (e.data("counterup-nums"), e.data("counterup-nums", null), e.data("counterup-func", null)) } }
var f = function() { if ($this.data('counterup-nums')) { //加个这个判断 $this.text($this.data('counterup-nums').shift()); if ($this.data('counterup-nums').length) { setTimeout($this.data('counterup-func'), delay); } else { $this.data('counterup-nums'); $this.data('counterup-nums', null); $this.data('counterup-func', null); } } };
waypoint,也就是第一个引入的文件是用于滚动监听的
倒数几行的位置有一行代码
$this.waypoint(counterUpper, { offset: '100%', triggerOnce: true });
这行代码的就是用了第一个引入的文件,滚动监听,你滚动到绑定countup数字滚动的标签位置,就会开始滚动数字,
你如果希望只滚动一次数字,那你就把这句注释掉,自己写滚动监听
// Perform counts when the element gets into view // $this.waypoint(counterUpper, { offset: '100%', triggerOnce: true }); var scrollBool = true; $(window).on('scroll', function() { if ($(window).height() + $(document).scrollTop() >= $this.offset().top && scrollBool) { scrollBool = false counterUpper(); } });
关于 数据每此都是第一次的数为问题 ;处理下这段代码
// if(!$this.data('counterupTo')) { $this.data('counterupTo',$this.text()); // }
注释掉 if(!$this.data('counterupTo'))
var f = function() { if ($this.data('counterup-nums')) { $this.text($this.data('counterup-nums').shift()); if ($this.data('counterup-nums').length) { setTimeout($this.data('counterup-func'), delay); } else { $this.data('counterup-nums'); $this.data('counterup-nums', null); $this.data('counterup-func', null); } } };
这个是加在哪里呢,现在报错呢
Cannot read property 'shift' of null
at f
var f = function() { if (e.data("counterup-nums")) { //报错另外添加的判断 e.text(e.data("counterup-nums").shift()), e.data("counterup-nums").length ? setTimeout(e.data("counterup-func"), a) : (e.data("counterup-nums"), e.data("counterup-nums", null), e.data("counterup-func", null)) } };