jQuery动画数字计数器从零到值

时间:2014-04-11 07:44:32

标签: javascript jquery html animation each

我创建了一个脚本,用于将数字从零动画设置为它的值。

工作

的jQuery

$({ Counter: 0 }).animate({
  Counter: $('.Single').text()
}, {
  duration: 1000,
  easing: 'swing',
  step: function() {
    $('.Single').text(Math.ceil(this.Counter));
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="Single">150</span>


不工作

我现在想在页面上为每个匹配的类多次运行该脚本。

以下是我正在尝试的但到目前为止没有成功:

HTML

<span class="Count">200</span>
<span class="Count">55</span>

JQUERY

$('.Count').each(function () {
  jQuery({ Counter: 0 }).animate({ Counter: $(this).text() }, {
    duration: 1000,
    easing: 'swing',
    step: function () {
      $(this).text(Math.ceil(this.Counter));
    }
  });
});

10 个答案:

答案 0 :(得分:67)

您的this并未引用步骤回调中的元素,而是希望在函数开头保留对它的引用(在我的示例中包含在$this中) :

$('.Count').each(function () {
  var $this = $(this);
  jQuery({ Counter: 0 }).animate({ Counter: $this.text() }, {
    duration: 1000,
    easing: 'swing',
    step: function () {
      $this.text(Math.ceil(this.Counter));
    }
  });
});

更新:如果您想显示十进制数字,那么您可以使用Math.ceil舍入最多2位小数,而不是使用value.toFixed(2)来舍入值:

step: function () {
  $this.text(this.Counter.toFixed(2));
}

答案 1 :(得分:17)

步骤回调中的

this不是元素,而是传递给animate()的对象

$('.Count').each(function (_, self) {
    jQuery({
        Counter: 0
    }).animate({
        Counter: $(self).text()
    }, {
        duration: 1000,
        easing: 'swing',
        step: function () {
            $(self).text(Math.ceil(this.Counter));
        }
    });
});

另一种方法是保持对this的引用

$('.Count').each(function () {
    $(this).prop('Counter',0).animate({
        Counter: $(this).text()
    }, {
        duration: 1000,
        easing: 'swing',
        step: function (now) {
            $(this).text(Math.ceil(now));
        }
    });
});

FIDDLE

答案 2 :(得分:5)

重要:这似乎是一个小差异,但您应该使用数据属性来保存原始数字。更改原始号码可能会产生意想不到的后果。例如,每次元素进入屏幕时我都会运行此动画。但是如果元素进入,退出,然后在第一个动画结束前第二次进入屏幕,它将计入错误的数字。

HTML:

<p class="count" data-value="200" >200</p>
<p class="count" data-value="70" >70</p>
<p class="count" data-value="32" >32</p>

JQuery的:

$('.count').each(function () {
    $(this).prop('Counter', 0).animate({
            Counter: $(this).data('value')
        }, {
        duration: 1000,
        easing: 'swing',
        step: function (now) {                      
            $(this).text(this.Counter.toFixed(2));
        }
    });
});

答案 3 :(得分:2)

代码的作用是,数字8000从0到8000计数。问题是,它位于相当长的页面的中间,一旦用户向下滚动并实际看到数字,动画已经在用餐了。一旦它出现在视口中,我想触发计数器。

JS:

$('.count').each(function () {
                $(this).prop('Counter',0).animate({
                        Counter: $(this).text()
                }, {
                        duration: 4000,
                        easing: 'swing',
                        step: function (now) {
                                $(this).text(Math.ceil(now));
                        }
                });
            });

和HTML:

 <span class="count">8000</span>

答案 4 :(得分:1)

您可以在.each()中获取元素,尝试使用this

$('.Count').each(function (index, value) {
    jQuery({ Counter: 0 }).animate({ Counter: value.text() }, {
        duration: 1000,
        easing: 'swing',
        step: function () {
            value.text(Math.ceil(this.Counter));
        }
    });
});

答案 5 :(得分:1)

这是我的解决方案 并且当元素显示到视口中时


您可以通过单击jfiddle

来查看运行中的代码
var counterTeaserL = $('.go-counterTeaser');
var winHeight = $(window).height();
if (counterTeaserL.length) {
    var firEvent = false,
        objectPosTop = $('.go-counterTeaser').offset().top;

        //when element shows at bottom
        var elementViewInBottom = objectPosTop - winHeight;
    $(window).on('scroll', function() {
        var currentPosition = $(document).scrollTop();
        //when element position starting in viewport
      if (currentPosition > elementViewInBottom && firEvent === false) {
        firEvent = true;
        animationCounter();
      }   
    });
}

//counter function will animate by using external js also add seprator "."
 function animationCounter(){
        $('.numberBlock h2').each(function () {
            var comma_separator_number_step =           $.animateNumber.numberStepFactories.separator('.');
            var counterValv = $(this).text();
            $(this).animateNumber(
                {
                  number: counterValv,
                  numberStep: comma_separator_number_step
                }
            );
        });
    }


https://jsfiddle.net/uosahmed/frLoxm34/9/

答案 6 :(得分:0)

这对我有用!

?movieName=

答案 7 :(得分:0)

这对我有用

array([ 1, -9, -8, -7, -6, -5, -4, -3,  9, 10])

答案 8 :(得分:0)

这对我有用

HTML CODE

<span class="number-count">841</span>

jQuery代码

$('.number-count').each(function () {
    $(this).prop('Counter',0).animate({
        Counter: $(this).text()
    }, {
        duration: 4000,
        easing: 'swing',
        step: function (now) {
            $(this).text(Math.ceil(now));
        }
    });

答案 9 :(得分:-1)

您可以使用jQuery中的动画功能来做到这一点。

$({ countNum: $('.code').html() }).animate({ countNum: 4000 }, {
    duration: 8000,
    easing: 'linear',
    step: function () {
        $('.yourelement').html(Math.floor(this.countNum));
    },
    complete: function () {
        $('.code').html(this.countNum);
        //alert('finished');
   }
});

全文:

http://www.mishelshaji.co.in/howto/animated-number-counter-using-jquery/