『ウェブユーザビリティの法則』を読んで、実際に試してみたかったので、前に作ったサービスを改良してみた。Flickrから画像をブログに貼付けるための、Flickr to HTMLのデザインを変更。
Flickr to HTML : 画像を選んで<img>タグに(改良後)
使い勝手を改善するついでに新機能も追加。
- Flickr ユーザIDを、毎回入力しなくてよいように Cookieで保持
- 写真をタグで絞り込んで検索できるように
- 検索結果の数を、100件以上表示できるように
- リターンキーで検索できるように、フォームを修正
- 必要になってから、ユーザーインターフェースを表示
- Flickrからのデータ取得の間、読み込み中画像を表示
- 全体的に説明の文言を簡潔に
ちなみに、改良する前のデザインはこちら。
改良のために勉強したテクニック
以前のバージョンはかなり適当なつくりだったので、jQueryを1.3.2にあげつつ、jquery UI 1.7.1を利用。
jQueryでクッキーを利用するjquery.cookie.js プラグイン
flickr_idという名前で、Cookieをセットする
$.cookie('flickr_id', $.flickr.s.user_id);
Cookieから値を読み込んで、input フォームに入力
$("#flickr_id").attr("value", function(){ return $.cookie('flickr_id') || "" ;});
jQueryでの、JSON呼び出しは非常に簡単
getJSONメソッドを呼び出すだけで、callback実行まで自動でやってくれます。
$.getJSON(url, function(r) {
// JSONを読み込んだあとの処理を記述
$.flickr.loadImages(r, $.flickr.s);
});
jQueryで、Ajaxの読み込み中にローディング画像を表示
表示したいローディング画像やdivなどに、id="loading"を追加して、jQueryで以下を指定。
$("#loading").bind("ajaxSend", function(){
$(this).show();
}).bind("ajaxComplete", function(){
$(this).hide();
});
formのsubmitを、javascriptで制御する
formのsubmitボタンに、jQueryで functionを追加する場合は、最後に return false; することで、IEなど一部のブラウザで画面遷移してしまうのを防げる。
$("form#flickr_form").submit( function () {
$("#container").show("blind");
$.flickr.s.user_id = $("#flickr_id").attr("value");
$.flickr.s.tags = $("#flickr_tags").attr("value");
$.flickr.s.per_page = $("form#flickr_form input[name=per_page]:radio:checked").attr("value");
$.cookie('flickr_id', $.flickr.s.user_id);
$.flickr.request();
return false;
});
$.each を使ってコードをすっきり
jQueryの強力なセレクタと、each メソッドの組み合わせで処理を簡潔に記述。
// 選択されているチェックボックスの値を配列に追加
$("input:checkbox:checked.imagechoice").each(function(){
$.flickr.order.push(this.value);
});
三項演算子は楽しい
if, else がどんどん短くなって楽しい。
var size = $("#menu_l").attr("checked") ? this.jpg.medium : this.jpg.small;
あと、inputがnullだった場合などに、デフォルト値を設定するのに ||も便利。
$.flickr.s.user_id = $("#flickr_id").attr("value") || "デフォルト値";;
このあたりは、jQuery本体や,jQuery UIのソースコードを読むとすごく勉強になりますね。次はクロージャなどを、ちゃんと使えるようになってみたい。

ブックマーク & Twitter & はてなスター
コメント