SHOEISHA iD

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

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

jQuery UI/プラグインの活用

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

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

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

メソッドでパターンロックを操作

 PatternLockコンストラクタで生成したオブジェクトに対して、表2のメソッドを利用できます。

表2 PatternLockのメソッド
メソッド 内容 備考
option(key[,value]) オプションを取得・設定 valueを指定すると設定される
reset() 初期状態に戻す -
error() エラー表示にする パターンの円が赤く表示される
getPattern() その時点のパターンを取得 -

 メソッドの利用例をリスト5に示します。

リスト5 PatternLockプラグインのメソッドを利用(005_patternLock_5.html)
$("#btn1").on("click", function(){
    // オプション値取得
    alert("matrix = " + lock.option("matrix"));
});
$("#btn2").on("click", function(){
    // オプション値設定
    lock.option("matrix", [5,5]);
});
$("#btn3").on("click", function(){
    // パターンのリセット
    lock.reset();
});
$("#btn4").on("click", function(){
    // パターンのエラー表示
    lock.error();
});
$("#btn5").on("click", function(){
    // パターン値の取得
    alert("Pattern = " + lock.getPattern());
});

 リスト5を実行すると、PatternLockのメソッドを試すことができます。

図6 getPatternメソッドで現在のパターン値を取得(005_patternLock_5.html)
図6 getPatternメソッドで現在のパターン値を取得(005_patternLock_5.html)

サーバーと連携してパターンを判定

 最後に、Pattern Lockプラグインのメソッドやイベントをより実用的に利用する例として、サーバーと通信してパターンを判定するサンプルをリスト6に示します。パターンが確定したときにそれをサーバーに送信し、サーバーから返される判定値によって結果を表示します。

リスト6 サーバーと通信してパターンを判定(006_patternLock_6.html)
var lock = new PatternLock("#patternLock1",{
    onDraw: function(pattern){
        $.ajax({
            url: "patternCheck.php",       // パターンを送信するURL ...(1)
            cache: false,
            type: "POST",
            data: {"pattern" : pattern},
            success: function(data) {
                $("#ajaxData").text(data); // サーバーの判定を表示
                if (data == "true") {      // パターンが正しい時の処理 ...(2)
                    $("#msg").text("正しいパターンです。");
                }
                else {                     // パターンが正しくない時の処理 ...(3)
                    lock.error();
                    $("#msg").text("正しくないパターンです。");
                }
            },
            error: function() {            // Ajax通信エラー時の処理 ...(4)
                lock.error();
                $("#msg").text("通信エラーです。");
            }
        });
    }
});
$("#btnReset").on("click", function(){      // リセットボタン ...(5)
    lock.reset();
    $("#msg").text("");
    $("#ajaxData").text("");
});

 パターンが確定すると発生するonDrawイベントでパターンを取得して、(1)のURLにHTTP POSTで送信します。サーバーからの戻り値が「true」ならばパターンが正しい時の処理(2)、それ以外ならパターンが正しくない時の処理(3)を実行します。パターンが正しくないときはerrorメソッドでエラー表示をします。(4)はAjax通信失敗時の処理、(5)のリセットボタン処理はresetメソッドでパターンロックをリセットし、テキスト表示もクリアします。

 リスト6に対応するサーバー側実装をリスト7に示します。パターンが"1478963"であるときに"true"を出力する単純なPHPファイルです。

リスト7 パターンを判定するサーバー側の処理(patternCheck.php)
<?php
    if ($_POST["pattern"] === "1478963") {
        echo "true";
    }
    else {
        echo "false";
    }
?>

 リスト6、リスト7を実行すると、サーバーの判定値を元にWebページ上に判定結果が表示されます。

図7 サーバーと連携したパターン判定(左:正しいパターン、右:正しくないパターン)
図7 サーバーと連携したパターン判定(左:正しいパターン、右:正しくないパターン)

 なお今回は詳細を紹介しませんが、Node.jsのサーバーで動作するPattern Captchaと組み合わせることで、パターンロックをCAPTCHA(投稿者が人間であることを証明するために特定操作をさせるテスト)に利用することができます。

図8 パターンロックを用いたCAPTCHA
図8 パターンロックを用いたCAPTCHA

まとめ

 本記事では、Webページにパターンロックを表示するPattern Lockプラグインを紹介しました。パターンロックはAndroidで一般的に用いられる馴染みの深いUI部品です。PCよりスマートフォンやタブレットをよく使う利用者が増加し続ける状況を考えると、スマートフォンの操作体系をWebページに持ち込むことは利用者にとって利便性の向上につながります。モバイル向けWebページに限らず、様々な用途で導入を検討したいプラグインです。

参考資料

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング