スクロールしないUI
無限スクロールは、
無限スクロールは
今回は高速ページ切り替えを主体としたAmazon検索のサンプルコードをJavaScriptで作りました。スクロールしないUIを作るときには参考にしてみてください
リスト1にサンプルの抜粋を掲載しますが、
- 表示する件数を画面にフィットさせてスクロール不要にする
- 画面サイズに合わせて表示件数や倍率を動的に変更する
- 前後のページはあらかじめデータをキャッシュしておき、
切り替えを高速に行えるようにする
var current_query; //現在のクエリページ
var current_page = 1;
var current = -1;
//検索ボックスにフォーカスを残したしたまま、矢印キーで読み進められるようにする
function keydown(e){
var kc = e.keyCode;
if (kc == 40) { //下方向キー
//下アイテムへカーソルが移動 or 次ページへ進む
if (current == 9 && get_cache(current_query, current_page+1)) {
current_page++;
current = 0;
refresh();
} else {
current = Math.min(9, current+1);
}
} else if (kc == 38) { //上方向キー
//上アイテムへカーソルが移動 or 前ページへ進む
if (current == 0 && current_page != 1) {
current_page--;
current = 9;
refresh();
} else {
current = Math.max(0, current-1);
}
}
if (kc == 40 || kc == 38) {
var el = jQuery(".item").removeClass("active")
.eq(current)
.addClass("active")
.get(0);
show_info(el);
}
if (current_query != this.value && e.keyCode == 13) {
current = -1;
current_page = 1;
search(this.value, current_page);
current_query = this.value;
}
}
var CACHE = { };
function get_cache(keyword, page) { return CACHE["_" + keyword + "_" + page] }
function set_cache(keyword, page, items) { return CACHE["_" + keyword + "_" + page] = items }
function prefetch(keyword, page) {
var param = "keyword=" + encodeURIComponent(keyword) +
"&page=" + page;
if ( get_cache(keyword, page) ) return;
jsonp(api + "?" + param , function(items){
set_cache(keyword, page, items) });
}
function refresh() {
search(current_query, current_page, function() {
jQuery(".item").removeClass("active")
.eq(current)
.addClass("active");
});
}
function search(keyword, page, cb) {
var show_result = function(items){
var start = (current_page - 1) * 10 + 1;
$("result").innerHTML =
"<h3>検索結果 " + start + "-" + (start + 9) + "</h3>"
+ items.map(function(item){
return tmpl.replace(/\$(\w+)/g, function($0,$1){
return item[$1] || ""
})
}).join("");
if (cb) cb();
};
if (get_cache(keyword, page)) { //キャッシュされていれば使う
show_result(get_cache(keyword, page));
prefetch(keyword, page + 1); //次ページを先読みする
} else {
var param = "keyword=" + encodeURIComponent(keyword) +
"&page=" + page;
jsonp(api + "?" + param , function(items){
set_cache(keyword, page, items);
show_result(items);
//まだ結果があれば次ページをあらかじめキャッシュする
if (items.length) { prefetch(keyword, page + 1) }
});
}
}
さらに、
ページングの最適化
スクロールだけで済むもの
しかしページングに注目すれば、
使用環境による最適化
画面サイズにコンテンツをフィットさせるUIがうまく機能した場合、
スクロールが快適に行えるかどうか、
入力デバイスに特化した最適化
タッチパネルデバイスの登場によってスクロールバーのあり方が変化したように、
入力デバイスごとにUIが変化しているのも事実です。表1にデバイスごとのメリット・
デバイス | メリット | デメリット |
---|---|---|
キーボード |
| 画面上の要素を直接選択するのは苦手 |
ホイールつきマウス |
| ポインタが1つしかない |
トラックパッド |
| タッチパネルほど直感的ではない |
タッチパネルデバイス |
| 細かい要素の選択は苦手 |
デバイスの差でUIが変化する要因としては次のようなことが挙げられます。
- ユーザの習熟度
- 画面の解像度
- 入力デバイス
- 通信速度や使う場所
ここではスマートフォンの影響で最近普及しているタッチパネルを取り上げます。
タッチパネル
タッチパネルは最も直感的に要素を選択できる一方で、
たとえばメニュー項目に対して
マウスを前提とする場合は、
そのため、
先にも触れたように、
デバイスの弱点を克服する取り組み
ここではデバイスに特化したUI、
キーボードブラウジングの革命
デバイスに特化したUIとして、
今までのキーボードブラウジングは、
この2つのアドオンは本来ならばキー操作が割り当てられていないリンクに対して、

キー操作によるリンクの選択が今までなかったかというと、
バブルカーソル
バブルカーソルとは、

バブルカーソルのようなしくみがあれば、
マウスの移動距離が減るのですばやく操作することができるようになり、
マウスジェスチャ
マウスジェスチャとは、
Operaが搭載したことで広く知られるようになりました。たとえば、
Operaはブラウザ本体の機能でサポートしていますが、
ゲームや少ボタン端末向けのUI
次に、
正確な起源を把握しているわけではありませんが、
リングコマンドの特徴は、
- 目的となるメニューを探す
- 移動するカーソルを見る
- カーソルを合わせて決定ボタンを押す
という流れが必要です。
カーソルが今どこにあるのかを常に意識しないといけませんし、
リングコマンドでのメニューの選択は
- リングコマンドが出現する固定位置を見る
- 目的となるメニューが表示されるまで繰り返す
- 決定ボタンを押す
となり、
リングコマンドはボタンの数が少ない状況下でも機能するのが特徴のUIです。望んだ状態になるまで単純な操作を繰り返し、
UIの変化と改良プロセス
使いやすさは
どっちのほうが好み? という質問には明確な解答を得ることは難しいものですが、
「発明」
Hit-a-hintは、
このうちいくつのUIがユーザに受け入れられ、
「どこからでも使えるようにする」
最近では特にスマートフォンの普及に伴って、
エンジニアの中には
しかし、
ゲームなど異なる分野ではよく知られていたり、
本稿を読んでいるみなさんでしたら、
革新的なUIはユーザ体験の変化をもたらし、