jQueryで数字のカウントアップ(ダウン)アニメーションを実装する
jQueryで数字がカウントアップ、または、カウントダウンするアニメーションを実装します。
ショッピングサイトや保険見積もりサイトなどで、商品やオプションを選択すると、合計金額がカウントするアニメーションをよく見かけます。
今回、それを実装する機会があったので、ここにメモとして残しておきます。
例えば、以下のHTMLの金額の数字部分をカウントするとします。
<div id="price"> <span>0</span> 円 </div>
0から1000へアニメーションを実行するJavaScriptコードは以下のとおりです。
$({count: 0}).animate({count: 1000}, { duration: 1000, easing: 'linear', progress: function() { $('#price span').text(Math.ceil(this.count)); } });
変数countに0から1000までの値を断続的にセットすることで、アニメーションを実現します。
durationがアニメーションの長さです。単位はミリ秒ので上記は1秒です。easingがエフェクトになります。
これを応用したデモがこちらです。
プログラムは以下のとおりです
var price = 0; $('#price_up').click(function(){ $({count: price}).animate({count: price+100}, { duration: 1000, easing: 'swing', progress: function() { $('#price span').text(Math.ceil(this.count)); } }); price+=100; }); $('#price_down').click(function(){ $({count: price}).animate({count: price-100}, { duration: 1000, easing: 'swing', progress: function() { $('#price span').text(Math.ceil(this.count)); } }); price-=100; });
「id=”price_up”」のボタン「数値を100増やす」をクリックすると、現在の値に100を加えてアニメーションを実行します。
「id=”price_down”」のボタン「数値を100減らす」をクリックすると、現在の値から100を引いてアニメーションを実行します。
小数点以下の値からカウントアップする方法
リクエストがあったので、小数点以下のカウントアップデモを設定しました。
プログラムは以下の通りです。
var price2 = 0; $('#price2_up').click(function(){ $({count: price2}).animate({count: price2+100}, { duration: 1000, easing: 'swing', progress: function() { $('#price2 span').text(Math.ceil(this.count)/100); }, complete: function(){ $('#price2 span').text('1.00'); } }); price2+=100; }); $('#price2_down').click(function(){ $({count: price2}).animate({count: price2-100}, { duration: 1000, easing: 'swing', progress: function() { $('#price2 span').text(Math.ceil(this.count)/100); }, complete: function(){ $('#price2 span').text('0.00'); } }); price2-=100; });
JavaScriptでは「小数点第2位以下を切り捨て」といった処理が困難なため、「Math.ceil(this.count)/100」として、1から100までのカウント中の値を100で割った結果を表示させています。
また、型が整数の1または0を「1.00」「0.00」と出力はできません。そこで、カウント処理終了後に文字型で「1.00」「0.00」を設定します。
お世話になっております。
ブログ大変勉強になりました。
お聞きしたいのですが、応用のデモを
0.00からカウントアップさせ増やしたい場合には
どのようなプログラムにすればよいのでしょうか?
上記ご教授頂けますと幸いです、
よろしくお願い致します。
コメントどうもありがとうございます!
拙速ではありますがサンプルを追加してみました。
こちらでいかがでしょうか?