レスへのジャンプ/スクロールについての調査

概要

専用ブラウザの大きな特徴として、>>1といったリンクをクリックすることによるジャンプがあります。しかし、IEコンポーネント上での実装についてはブラウザによって異なっています。
なお、ブラウザによって「ジャンプ」「スクロール」と呼称が異なりますが、ここでは「ジャンプ」に統一して記述します。

方式の比較

scrollIntoView()

アンカーオブジェクトのメソッドによりジャンプする方法

長所
簡単な記述のみで済む。
短所
水平スクロールバーが出ている場合、bodyからレス番号までのピクセル分だけ横スクロールもしてしまう。
対策
  • ジャンプ後に左スクロールして調整する
  • 水平スクロールバーが出ないように調整する

offsetTop

bodyオブジェクトのプロパティに、アンカーオブジェクトのoffsetTopを設定する方法。

長所
水平スクロールバーの有無に拘らず、正確にジャンプできる。
短所
HTMLやCSSの記述如何では、一切ジャンプできなくなることもある。
対策
offsetParentを使って、ページ左上からの高さを正確に取得するための手続きをつける。
ただし、IE6の解釈モード(standards/quirks)によって、ページ左上に該当する要素が異なってくるので、将来的なことを考えると注意が必要である。

ブラウザの実装状況

それぞれのブラウザは以下のようになっている。(ゾヌ2はダブルウィンドウとなるため除外した)

 方式 短所への対策
かちゅscrollIntoView()ジャンプ後に左スクロール
A BonescrollIntoView()CSSの設定で横スクロールが出ないように設定
ギコ offsetTop(*1) なし
Live offsetTop なし
OpenJ offsetTop body要素まで遡る
Acty offsetTop なし
twin scrollIntoView()なし
  • (*1):リンクのクリックイベントに関連付けられていないので、実際にジャンプはできない。

調査方法

調査にあたっては、まずスレッドの表示を擬似フレーム化することで、offsetの値を取得できなくすることで分類した。
その後、scrollIntoView()方式のものについては水平スクロールバーを出して分類し、offsetTop方式のものについては特定のHTML+CSSにより分類した。

考察

いずれの方式が優れているとはいえないが、いずれを選択するにしても、ブラウザ側において何がしかの対策が必要である。

また、スキンを作成する上で、擬似フレームを用いる場合には、offset方式のブラウザへの対応するため、クリックイベントを掠めてscrollIntoView()する必要がある。