J'ai créé un script pour animer un nombre de zéro à sa valeur.
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>
Je souhaite maintenant exécuter le script plusieurs fois sur la page pour chaque classe correspondante.
Voici ce que j'essaye mais sans succès jusqu'à présent:
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));
}
});
});
Votre this
ne fait pas référence à l'élément dans le rappel de l'étape, mais vous souhaitez conserver une référence au début de votre fonction (entouré de $this
Dans 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 souhaitez afficher des nombres décimaux, alors, au lieu d’arrondir la valeur avec Math.ceil
, Vous pouvez arrondir à 2 décimales, par exemple avec value.toFixed(2)
:
step: function () {
$this.text(this.Counter.toFixed(2));
}
this
dans le rappel de l'étape n'est pas l'élément mais l'objet transmis à 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 cela et de garder les références à this
serait:
$('.Count').each(function () {
$(this).prop('Counter',0).animate({
Counter: $(this).text()
}, {
duration: 1000,
easing: 'swing',
step: function (now) {
$(this).text(Math.ceil(now));
}
});
});
IMPORTANT : Cela semble être une petite différence, mais vous devriez vraiment utiliser un attribut de données pour contenir le nombre original. La modification du numéro d'origine peut avoir des conséquences imprévues. Par exemple, je fais exécuter cette animation à chaque fois qu'un élément entre à l'écran. Mais si l'élément entre, quitte, puis entre à l'écran une seconde fois avant la fin de la première animation, le nombre obtenu est incorrect.
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));
}
});
});
Le code fait que le nombre 8000 compte de 0 à 8 000. Le problème est qu’il est placé au milieu d’une page assez longue et que, une fois que l’utilisateur a fait défiler la liste et l’a vu, l’animation est déjà terminée. . Je voudrais déclencher le compteur, une fois qu'il apparaît dans la fenêtre.
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 HTML:
<span class="count">8000</span>
Vous pouvez obtenir 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));
}
});
});
C'est un 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>
Cela a fonctionné pour moi
CODE HTML
<span class="number-count">841</span>
code 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));
}
});
Cela fonctionne 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));
}
});
});