SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

jQuery UI/プラグインの活用

Androidスマホでおなじみ! パターンロックを表示するPattern Lockプラグイン

「jQuery プラグイン」の利用(26)

  • X ポスト
  • このエントリーをはてなブックマークに追加

JavaScriptで入力されたパターンを判定する方法

 入力されたパターンが正しいかどうかをJavaScript上で判定する方法として、checkForPatternメソッドが提供されています。checkForPatternメソッドの第1引数には正しいパターンを表す文字列、第2引数にはパターンが正しい時の処理、第3引数にはパターンが正しくない時の処理を記述します。

 なお正しいパターンを表す文字列は、ポイントに左上から1、2、……と番号を付けて、ポイントの指定順に番号を並べたものです。例えば図3のようなパターンは「1478963」と表されます。

図3 パターンの指定方法
図3 パターンの指定方法

 パターン判定処理の実装例をリスト2に示します。正しいパターンとして図3の「1478963」を指定しています。

リスト2 パターンの判定処理(002_patternLock_2.html)
var lock = new PatternLock("#patternLock1");
// パターンマッチ判定処理
lock.checkForPattern('1478963',
    function(){
        $("#msg").text("正しいパターンです。");
    },
    function(){
        $("#msg").text("正しくないパターンです。");
    }
);

 リスト2を実行すると、図3のパターンを入力した場合のみ「正しいパターンです。」と表示されるようになります。

図4 パターン判定を行う例(002_patternLock_2.html)
図4 パターン判定を行う例(002_patternLock_2.html)

パターン値を簡易的にわかりづらくするmapper機能

 リスト2のようにJavaScript内でパターンの判定を行う場合、ソースコードを見ればパターンの正しい値がわかってしまいます。そこでPattern Lockプラグインでは、パターンの値を外部からわかりづらくするために、入力されたパターンを「mapper」で別の値に変換することができます。

 mapperの定義例をリスト3に示します。この場合は、入力されたパターンの「1を9に」、「2を8に」……と変換してから正しいパターンと比較します。またmapperは関数を用いて定義することもでき、例をリスト3のコメントに示します。なおmapperを指定する場合、パターン判定に用いる正しいパターンは、mapperで変換した後の値を指定します。リスト3は結果としてリスト2と全く同じように動作します。

リスト3 mapperの利用(003_patternLock_3.html)
var lock = new PatternLock("#patternLock1", {
    // mapper指定:入力パターンの1を9に、2を8に……と変換
    mapper:{1:9, 2:8, 3:7, 4:6, 5:5, 6:4, 7:3, 8:2, 9:1}
//  // mapperを関数で指定する例(↑と同じ処理)
//  mapper: function(idx) {
//      return (10 - idx);
//  }
});
lock.checkForPattern("9632147", //「1478963」をmapperで変換した後の値
    function(){
        $("#msg").text("正しいパターンです。");
    },
    function(){
        $("#msg").text("正しくないパターンです。");
    }
);

 mapperはあくまでパターン値を変換して正しいパターン値をソースコードから読み取りづらくするだけの機能で、JavaScriptで判定を行う限り本質的に正しいパターン値を完全に隠ぺいすることはできません。より厳密な認証が必要になる場合はサーバー側で判定処理を行う必要があります。サーバー側判定処理の例は後述します。

オプション指定でパターンの点数やサイズなどを変更

 PatternLockメソッドの第2引数にJavaScriptオブジェクトを指定して表示や動作をカスタマイズできます。主なオプションを表1に示します。

表1 PatternLockの主なオプション
オプション名 内容 初期値
matrix パターンの点数 [3, 3]
radius パターンに表示される円の半径 20
margin 円と隣の円の間隔 25
patternVisible パターンの線を表示するかどうか true
lineOnMove ドラッグ中にパターンの線を動かすかどうか true
onDraw パターンが確定したときに発生するイベント 定義なし

 オプションの設定例をリスト4に示します。

リスト4 PatternLockのオプション設定(004_patternLock_4.html)
var lock = new PatternLock("#patternLock1", {
    matrix: [5,5],    // 5×5のパターン
    radius: 30,       // 円の半径
    margin: 10,       // 円と隣の円の間隔
    lineOnMove: false // ドラッグ中にパターンの線を動かさない
});

 リスト4を実行すると、図5のように表示内容が変わります。

図5 オプション設定でパターン点数を増やした例(004_patternLock_4.html)
図5 オプション設定でパターン点数を増やした例(004_patternLock_4.html)

次のページ
まとめ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
jQuery UI/プラグインの活用連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト  吉川 英一(ヨシカワ エイイチ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8271 2014/12/03 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング