すたらブログ

文系Webプログラマの備忘録

jQuery: キー押下中の移動速度を任意に設定するサンプルを作りました

たとえば、上下キーで項目を選択する処理をjQueryの".keydown()"で作成するとします。
キーをちょこんと1回押すのではなく、ずっと押しっぱなしにしていると、かなりの速度で選択項目が移動してしまいます。
それを任意の速度に調整するためのサンプルを作りました。
Runnableで公開しているので、試しに動かすこともできます。

要点

このサンプルのキモは以下の部分です。

JavaScript
_processKey: function(keyCode, nextAction) {
    if (this.prevKeyCode == keyCode) {
        // 継続押下中
        this.cnt++;
        if (this.cnt >= this.wait) {
            this.cnt = 0;
            this[nextAction]();
        }
    } else {
        // 初押下
        this.prevKeyCode = keyCode;
        this[nextAction]();
    }
},

以前に保存したキーコード(this.prevKeyCode)と、".keydown()"で取得したばかりのキーコード(keyCode)を比較して、同じキーを押しっぱなしにしているかどうかを判断します。
継続押下中ならば専用のカウント(this.cnt)を加算します。
そのカウントが所定の値(this.wait)に達したら、そこでようやく移動処理(this[nextAction]())を呼び出します。

雑感

この処理は、昔々ある人物が作ったものを流用したものです。
もとはプログラミング言語では作られていません。
最近になってこの処理が必要になったのでJavaScriptで再現しました。

ところで、最近の私はまた鬱っています。 2014年3月23日から微熱が続き、3月29日から生活のリズムが崩れました。
そして現在まで自室に引きこもっています。

今回のサンプルも、現実逃避のために始めた制作で必要になったため、作りました。