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))
}
};