の形で呼ぶ。
//
// anchor_idはフレームを使う場合最低限各フレームごとに設定。お互い他のフレームを書換えたときにへんな干渉をさけるため。
// その他ページの種別毎などで変えてもよいが、あまり小分けにするとcookieが増える。
// 同じanchor_idで保存されるcookieは1セットのみ。でも単独ページ表示のサイトなら概ねこれで充分。
anchor_id = "anc_main";
noanchor = false; // bodyにanchorをしかけたときなど場合によって一時無効にするためのフラグ。
// アンカーの記憶。
function anchor_save(object_id, page_id) {
if(noanchor) { anchor_erase(); return; }
get_scroll();
setcookie(anchor_id+"_pid", page_id, 0);
setcookie(anchor_id+"_st", scroll_top, 0);
setcookie(anchor_id+"_sl", scroll_left, 0);
if(object_id) {
object_top = scroll_top + get_object_top(object_id);
object_left = scroll_left + get_object_left(object_id);
setcookie(anchor_id+"_oid", object_id, 0);
setcookie(anchor_id+"_ot", object_top, 0);
setcookie(anchor_id+"_ol", object_left, 0);
} else {
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
}
// アンカーの適用。
function anchor_apply(page_id) {
if((saved_page_id = getcookie(anchor_id+"_pid")) && page_id != saved_page_id) { return; }
get_scroll();
if((anchor_st = getcookie(anchor_id+"_st")) != "" && (anchor_sl = getcookie(anchor_id+"_sl")) != "") {
anchor_st = parseInt(anchor_st);
anchor_sl = parseInt(anchor_sl);
} else {
anchor_st = scroll_top;
anchor_sl = scroll_left;
}
if((object_id = getcookie(anchor_id+"_oid"))
&& (anchor_ot = getcookie(anchor_id+"_ot")) != ""
&& (anchor_ol = getcookie(anchor_id+"_ol")) != "") {
offset_top = (scroll_top + get_object_top(object_id)) - parseInt(anchor_ot);
offset_left = (scroll_left + get_object_left(object_id)) - parseInt(anchor_ol);
} else {
offset_top = offset_left = 0;
}
window.scrollTo(anchor_sl + offset_left, anchor_st + offset_top);
}
// アンカー消去。あえてとっておく必要がなければanchor_apply()後すぐ消去が望ましい。
function anchor_erase() {
setcookie(anchor_id+"_pid", "", -1);
setcookie(anchor_id+"_st", "", -1);
setcookie(anchor_id+"_sl", "", -1);
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
//-->
IRORIBATA
その他あれこれ
今後主流となるHTML5ではフレームセット(<frameset>)がなくなるようです。 わかりやすいページ分割表示にたいへん重宝していますが、情報収集ロボットと相性が悪いということのようです。 仕方がないので<frameset>は使わずに、人間との相性をまず大事にして、javascriptを駆使してインラインフレーム(<iframe>)を使い同等の表示をすることにしました。 |
|
|
その昔多くのサイトが<frameset>タグを使用したフレーム表示を採用していました。 多くはインデックス(目次)ページとそ各内容のページに分けて表示していました。 この<frameset>を使うメリットは以下のようなことで、おそらく一言で言えば人間にとってとてもわかりやすいということでしょう。 | 1. | サイト全体の構成や内容の把握をインデックスフレームで、その詳細を内容のフレームで容易に把握できる。 | | 2. | インデックスページとコンテンツページを別々に作れるため、サイトの構築がやりやすい。 |
|
|
ただこの<frameset>は初期の検索ロボットの情報収集能力とは相性が悪かったようで、検索結果が上位にこないなどの弊害があると言われていました。 このためかプロは<frameset>をつかうべきではないなどと言われ、画面べた一枚、本文とタイトルのリストが並べられて同時にスクロールされ、次のページを見るには頭にスクロールし戻さなくてはならないといった(人間には)大変見にくく操作もめんどいページが増えてしまいました。
また機械的な情報収集がしやすいようにとの目的か、HTML5の仕様では<frameset>が非推奨となり、分割表示にしたければ代わりにごく単純化された<iframe>を使うこととなります。
実は<iframe>を使って<frameset>と同等のことをしようとするとjavascriptを駆使しなくてはならず、多少面倒です。 IRORIBATAではがんばって<iframe>を使ってタイトルと本文の分割表示、およびその間の連携操作を可能としました。 やはりこの方法が一番わかりやすく操作しやすいように思います。
検索ロボットとの相性で言えば、しばらく<frameset>を使っていましたが、そのうち検索ロボットの急速な進化により問題は全く感じられなくなりました。でもHTML5への対応のため、そしてなにより人が見やすいようにと<iframe>を使ってのメニュー/記事分割表示としました。
|
|
|
|