JavaScriptで入力されたパターンを判定する方法
入力されたパターンが正しいかどうかをJavaScript上で判定する方法として、checkForPatternメソッドが提供されています。checkForPatternメソッドの第1引数には正しいパターンを表す文字列、第2引数にはパターンが正しい時の処理、第3引数にはパターンが正しくない時の処理を記述します。
なお正しいパターンを表す文字列は、ポイントに左上から1、2、……と番号を付けて、ポイントの指定順に番号を並べたものです。例えば図3のようなパターンは「1478963」と表されます。
パターン判定処理の実装例をリスト2に示します。正しいパターンとして図3の「1478963」を指定しています。
var lock = new PatternLock("#patternLock1"); // パターンマッチ判定処理 lock.checkForPattern('1478963', function(){ $("#msg").text("正しいパターンです。"); }, function(){ $("#msg").text("正しくないパターンです。"); } );
リスト2を実行すると、図3のパターンを入力した場合のみ「正しいパターンです。」と表示されるようになります。
パターン値を簡易的にわかりづらくするmapper機能
リスト2のようにJavaScript内でパターンの判定を行う場合、ソースコードを見ればパターンの正しい値がわかってしまいます。そこでPattern Lockプラグインでは、パターンの値を外部からわかりづらくするために、入力されたパターンを「mapper」で別の値に変換することができます。
mapperの定義例をリスト3に示します。この場合は、入力されたパターンの「1を9に」、「2を8に」……と変換してから正しいパターンと比較します。またmapperは関数を用いて定義することもでき、例をリスト3のコメントに示します。なおmapperを指定する場合、パターン判定に用いる正しいパターンは、mapperで変換した後の値を指定します。リスト3は結果としてリスト2と全く同じように動作します。
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に示します。
オプション名 | 内容 | 初期値 |
---|---|---|
matrix | パターンの点数 | [3, 3] |
radius | パターンに表示される円の半径 | 20 |
margin | 円と隣の円の間隔 | 25 |
patternVisible | パターンの線を表示するかどうか | true |
lineOnMove | ドラッグ中にパターンの線を動かすかどうか | true |
onDraw | パターンが確定したときに発生するイベント | 定義なし |
オプションの設定例をリスト4に示します。
var lock = new PatternLock("#patternLock1", { matrix: [5,5], // 5×5のパターン radius: 30, // 円の半径 margin: 10, // 円と隣の円の間隔 lineOnMove: false // ドラッグ中にパターンの線を動かさない });
リスト4を実行すると、図5のように表示内容が変わります。