ゼロからその値までの数値をアニメーション化するスクリプトを作成しました。
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));
}
});
});
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));
}
});
});
_
更新:10進数を表示したい場合、値を_Math.ceil
_で丸める代わりに、value.toFixed(2)
でインスタンスを小数点以下2桁に丸めることができます。
_step: function () {
$this.text(this.Counter.toFixed(2));
}
_
ステップコールバック内の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));
}
});
});
[〜#〜] important [〜#〜]:小さな違いのように思えますが、実際にはデータ属性を使用して、カウントアップする元の数値を保持する必要があります。元の番号を変更すると、意図しない結果になる可能性があります。たとえば、要素が画面に入るたびにこのアニメーションを実行しています。しかし、最初のアニメーションが終了する前に、要素が画面に入り、画面から出て、もう一度画面に入ると、間違った数までカウントされます。
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));
}
});
});
コードが行うことは、数字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>
.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));
}
});
});
これは私の仕事です!
<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>
これは私のために働いた
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));
}
});
これは私のために働いています
$('.Count').each(function () {
$(this).prop('Counter',0).animate({
Counter: $(this).text()
}, {
duration: 4000,
easing: 'swing',
step: function (now) {
$(this).text(Math.ceil(now));
}
});
});