ポイントを使ったり、増やしたりしたときに、結果のポイント数に差し替えるのではなくて、カウントアップしたり、カウントダウンして動的に動かそうと思って作ってみた。
補足1 jQueryを使っています。ただし要素の値を更新するところと表示エリアをクリックしたときにカウントアップ/カウントダウンを終了するところの2箇所だけなので、jQueryを使わない場合は適宜差し替えてもらえれば。
補足2 数字を渡している引数については、値が整数かの確認に、Number.isInteger を利用している。IEは未対応なので、IEにも対応させる場合は、別の判別方法を追加するか、判別処理のif文自体を削除するか、この例のようにIEの場合はカウントアップ/カウントダウンしないように割り切るか。
/**
* カウントアップ/カウントダウン
* (MEMO) Number.isInteger: 値が整数か判別する(IEは未対応)
*
* @param {object} *tgt: 要素
* @param {number} *st: スタートの数字(整数のみ)
* @param {number} *ed: エンドの数字(整数のみ)
* @param {number|function|object} param:
* {number} カウントアップのスピード(ミリ秒、デフォルト1秒、整数のみ)
* {function} カウント終了時に実行する関数
* {object}
* {number} speed: カウントアップのスピード(ミリ秒、デフォルト1秒)
* {number} unit: カウントアップする量(デフォルト1、整数のみ)
* {function} func: カウント終了時に実行する関数
* {boolean} is_not_click: カウント表示領域をクリックしてカウント終了できるようにするかどうか(デフォルトfalse)
*
* @return なし
*/
const countup = function(tgt, st, ed, param) {
let n = st,
speed = 1000,
unit = 1,
func = null,
countup = null,
is_not_click = false,
is_up;
// param が指定されている場合に上書きする
switch (true) {
case Number.isInteger(param):
speed = param;
break;
case typeof param == "function":
func = param;
break;
case typeof param == "object":
if (Number.isInteger(param["speed"])) {
speed = param["speed"];
}
if (Number.isInteger(param["unit"])) {
unit = param["unit"];
}
if (typeof param["func"] == "function") {
func = param["func"];
}
is_not_click = param["is_not_click"];
break;
default:
// なし
}
/**
* カウントした値の表示
*/
function countuping() {
tgt.html(n);
// カウント終了か判別する
if ((is_up && ed <= n) || (!is_up && ed >= n)) {
// カウントオーバーした場合に備えて上書きする
n = ed;
tgt.html(n);
if (func) func();
} else {
// 次のカウントを実行する
n = (is_up)? n + unit: n - unit;
if (countup) clearTimeout(countup);
countup = setTimeout(countuping, speed);
}
}
// 要素があるか判別する
if (tgt.length > 0) {
// st, ed, speed が整数か判別する
if (Number.isInteger && Number.isInteger(st) && Number.isInteger(ed) && Number.isInteger(speed)) {
// カウントアップかダウンか判別する
is_up = (ed - st > 0)? true: false;
// カウントする
countuping();
} else {
// 最後の値に差し替える
tgt.html(ed);
if (func) func();
}
// 要素をクリックしたら、エンドの数字をセットする
if (!is_not_click) {
tgt.css({cursor: "pointer"}).on("click", function(){
n = ed;
countuping();
return false;
});
}
}
}
こだわったのは、第4引数。
利用シーンとしては、基本はスピードの設定か、カウント終了時に何か処理をさせたいかの場合と考え、整数やファンクションを渡した場合にそれぞれ機能するようにした。さらにカスタマイズする可能性を考慮し、引数を増やすのではなくオブジェクトを渡すようにして、汎用性を高め、細かい設定ができるようにした。
<span class="js-count-num"></span>
200から300まで、0.01秒ごとにカウントアップして、.js-count-num のhtml内に表示する場合
countup($(".js-count-num"), 200, 300, 10);
10から1秒ごとにカウントダウンして、0のときにStart!!と表示する場合
countup($(".js-count-num"), 10, 0, function(){
$(".js-count-num").html("Start!!");
});
この書籍の中で、ライティングのユーザビリティについて触れている項目があり、激しく共感する部分だったので、ここで備忘録としてピックアップする。 ・・・
この書籍は、I部 リサーチ、II部 デザイン、III部 インプリメンテーションと三部構成になっている。この記事では、その中から、I部 リサーチ、・・・
これを知ったときはマジか!と飛び跳ねた。あらためて思い返してみると、確かに公式チュートリアルでも触れていたことをうっすら思い出す。そしてそのときとやり方がなん・・・
試したことはまだないけど、Macで編集時と書き出し後で色味が変わって困ったときのために備忘録。 プロジェクト設定 > 「カラーマネジメント・・・
プロジェクト設定と環境設定について詳しく解説されている情報がなかなか見つからないので、要所要所で知り得た情報を更新していきます。 プロジェクト設定 ・・・
Clipyが超絶便利そうだったので、macOS Big Sur にインストール&再起動して使ってみた。ところが、command + c を複数の箇所で行い、c・・・
requestAnimationFrame をはじめて見たので調べていたら、setTimeout や setInterval は requestAnimati・・・
6年ぶりに読み返したが、今なおハッとさせられることが多く見つかる。 この本で忘れないようにしたい項目をピックアップするだけでも役に立ちそ・・・
この記事では、以前に読んだ際に付箋を付けていたが、その部分だけを備忘録としてピックアップするため、本の要約ではない。実際は、何倍も濃い内容で、練・・・
もう一回、全部読み返したいところだが、書籍がありすぎるので、当時付箋紙をつけていたところだけをピックアップ。書籍内ではより具体的な説明があるので・・・
コンテンツの量に関わらず、スクロールしても、ヘッダーとフッターは常にブラウザ上に表示されるようにする。 ポイント htmlとbodyに高さ100%を指定する ・・・
#と6桁(もしくは3桁)の英数字(正確には16進数で表記される0から9、aからfの英数字)からなるカラーを、RGBでの数値に変換、もしくはRGBから16進数に変・・・
Clipyが超絶便利そうだったので、macOS Big Sur にインストール&再起動して使ってみた。ところが、command + c を複数の箇所で行い、c・・・
グローバル変数 スクリプトのどこからでも参照できる ローカル変数 ファンクションの中で宣言されたローカル変数はその中にしかない function squa・・・
具体的には、ブラウザ表示領域(ファーストビュー)とコンテンツ高さを比較して、コンテンツ高さの方が短い場合、フッターは下部に固定。コンテンツ高さの方が長い場合、ス・・・
記事のコメント部分を最低限必要な情報のみ直書きしてみます(WordPress 4.9.2 で実施)。 前提 誰でもコメントできる(管理画面の「設定」→・・・
変数bnにphpファイルのファイル名を拡張子なしで取得するサンプル $bn = basename($_SERVER['PHP_SELF'], ".php");・・・
たとえば、セルに「テスト左:テスト右」と書かれているのを「テスト左」「テスト右」とセルを分割する方法です。Javascriptでいうところのsplitです。 そ・・・
【2020年4月11日更新】 プラグイン名が「AMP for WordPress」から「AMP」に変更され、作成者も「AMP Project Contribu・・・
これまで利用させていただいていた印刷会社には全く不満はなかったのですが、ちょっと違うところも試してみたくなり、「印刷の通販グラフィック」さんに登録してみました。・・・
「test」
「>ころころさん コメントありがとうございます! 確かに、APIドキュメント見ましたが、ライブに関する情報は今のところ取得できないようですね。 インスタライ・・・」
「SIGMAから超軽量で明るい単焦点レンズが2本発売になりましたので、リストにレンズ情報追加しました!」
「>名無しさん ご指摘、ありがとうございます! 記事冒頭の「まずはサンプル」のサンプルが動いていませんでしたので修正しました。」
「>前田さん コメントありがとうございます。 環境は分かりかねますが、修正したいファイルのパーミッションを604や644に変更すると書き込みできるようになります(・・・」
「アバターを取得する「get_avatar」についても追記しました!」
「「値をクリアする」を追加しました。チェックボックスやラジオボタンの値を何も選択していない状態に戻すときについて触れています。」
「>匿名さん コメントありがとうございます。 サンプルでは、beforeは何も処理していないので期待する表示にならない、で正解です。 クリックした後が、対応・・・」
「(匿名)さん コメントありがとうございます。何も設定変更していないのに、それまで使用できていたサーバーが突然使えなくなるのは辛いですよね、、。 ここで紹介したや・・・」
「コメントありがとうございます! そもそもできるかはわかりませんが、ソースを書き換える必要はあります。 下記記事などが参考になるかもしれません。 illustra・・・」
WEB制作マークアップJavaScriptカウントアップ、カウントダウンするJavaScript | シンプルシンプルデザイン