jQuery compteur de nombres animés de zéro à la valeur

j'ai créé un script pour animer un certain nombre de zéro à sa valeur.

Travail

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>

Ne Fonctionne Pas

je veux maintenant lancer le script plusieurs fois sur la page pour chaque classe correspondante.

ci-Dessous est ce que j'essaie, mais sans succès loin:

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));
    }
  });
});
25
demandé sur DreamTeK 2014-04-11 11:44:32

9 réponses

thisne fait pas référence à l'élément de la fonction step callback, mais vous voulez garder une référence à cet élément au début de votre fonction (enveloppé dans $thisdans mon exemple):

$('.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));
    }
  });
});

mise à Jour: si vous voulez afficher des nombres décimaux, alors au lieu d'arrondir la valeur avec Math.ceil vous pouvez arrondi à 2 décimales par exemple avec value.toFixed(2):

step: function () {
  $this.text(this.Counter.toFixed(2));
}
62
répondu floribon 2016-04-28 07:59:25

this à l'intérieur de l'étape de rappel n'est pas l'élément, mais l'objet passé en animate()

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

une Autre façon de faire et de garder les références 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

16
répondu adeneo 2014-04-11 07:55:21

IMPORTANT: cela ressemble à une petite différence mais vous devriez vraiment utiliser un attribut de données pour tenir le nombre original pour compter jusqu'à. Modifier le numéro d'origine peut avoir des conséquences inattendues. Par exemple, je fais tourner cette animation chaque fois qu'un élément entre dans l'écran. Mais si l'élément qui entre, sort, puis entre à l'écran une seconde fois avant la première animation est terminée, il comptera jusqu'à la mauvaise nombre.

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));
        }
    });
});
4
répondu Tyler Kemme 2017-10-01 22:26:15

Vous pouvez obtenir de l'élément lui-même dans .each(), essayez ceci au lieu d'utiliser 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));
        }
    });
});
1
répondu Starscream1984 2014-04-11 07:47:49

ce que fait le code, c'est que le nombre 8000 compte de 0 à 8000. Le problème est qu'il est placé au milieu d'une page assez longue, et une fois que l'utilisateur fait défiler vers le bas et voit effectivement le nombre, l'animation est déjà dîné. Je voudrais déclencher le compteur, une fois qu'il apparaît dans la fenêtre d'affichage.

JS:

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

Et le code HTML:

 <span class="count">8000</span>
1
répondu igor 2017-10-09 15:27:40

C'est de travailler pour moi

$('.Count').each(function () {
    $(this).prop('Counter',0).animate({
        Counter: $(this).text()
    }, {
        duration: 4000,
        easing: 'swing',
        step: function (now) {
            $(this).text(Math.ceil(now));
        }
    });
});
0
répondu Ahmed Al Bermawy 2016-09-22 09:25:42

c'est du travail pour moi !

<script type="text/javascript">
$(document).ready(function(){
        countnumber(0,40,"stat1",50);
        function countnumber(start,end,idtarget,duration){
            cc=setInterval(function(){
                if(start==end)
                {
                    $("#"+idtarget).html(start);
                    clearInterval(cc);
                }
                else
                {
                   $("#"+idtarget).html(start);
                   start++;
                }
            },duration);
        }
    });
</script>
<span id="span1"></span>
0
répondu Taufiq Shamad 2016-09-22 09:45:01

Cela a fonctionné pour moi

CODE HTML

<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));
        }
    });
0
répondu Murtaxa 2017-03-17 06:09:12

Vous pouvez le faire avec la fonction animate en 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');
   }
});

article complet:

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

-1
répondu Ashin 2018-08-28 06:41:23