Liner Note

情報(ユーザー中心デザイン・ユーザビリティ)と技術(ウェブプログラミング・ウェブサービス)についてのメモ書き

web-conte.com | blue | 続・ページ内リンク(ID)にするするっと移動する

サイト内リンクを瞬間的にではなくスムーズに移動するJavascriptファイル。ニールセンさんの心配を解消するよいtipsだと思いますし、リニューアル後のサイトでも使う予定なのですが、これには1つ大きな問題があって肝心のサイト内リンクを踏んでも、URIの後ろにフラグメントID(#xxxみたいな)が付かないんですね。

で、とりあえず解決する方法として該当するjavascriptファイルを改造することで対処してみます。

JAVASCRIPTソースコード (ファイル94行目あたり)
if(Math.abs(top-fd.pageScroller.requestedY) <= 1 || fd.getScrollTop() == top) {
            window.scrollTo(0, fd.pageScroller.requestedY);
            //if(!document.all || window.opera) location.hash = fd.pageScroller.hash;
            //fd.pageScroller.hash = null;
++            location.href = '#' + fd.pageScroller.hash;

ちなみにこのスクリプト、body要素にonload属性を付けて云々すると動作しなくなるみたいです、Litebox 1.0との併用で確認しました。

では以上、簡単な改造でした。

正常に動作しないような改造方法になっていたので正常に動作するよう書き直しました。このスクリプトはあらかじめ決められた時間(=フラグメントIDに到達する時間)後にスクロールをストップさせるのですが、その前にリンク移動処理をしていたのが原因でした。


北村 暁さんが指摘されているとおり、リンクを踏んで飛んだ後に、ブラウザの「戻る」で戻ってもリンクがあった位置(飛ぶ前の位置)に戻らないという問題があります
LightBoxと併用すると、閉じるボタンでページが閉じなくなります。これはLightBoxが閉じるボタンに内部リンクを使用しているためです。たとえば以下のように改造すると正常に使えるようになります。

JAVASCRIPTソースコード
--        objBottomNavCloseLink.setAttribute('href','#');
++        objBottomNavCloseLink.setAttribute('href','/');


このバグのため、現在はこのサイトでの導入は一時的に見合わせています。

キーワード:

似たもの記事

読者の皆さんの反応サイト内コメントの更新情報(RSSフィード)

読者のコメント

1

ブックマークコメント

0

他サイトの関連記事

1

読者のコメント

  1. お名前

    High5

    投稿日時
    2008年07月31日
    2時ごろ
    Comment No
    #1

    なんていうか力の入れ方が半端ないですね。ユーザビリティとかに対する情熱がすごく感じられます。

はてなブックマークでつけられたコメント

他サイトの関連記事

  1. ウェブサイト

    web-conte.com

    投稿日時
    2007年08月08日
    13時ごろ
    Comment No
    #1

    続々・ページ内リンク(ID)にするするっと移動する…

     なかなか最終版がかたまらずすいませんが、「続・ページ内リンク(ID)にするするっと移動する」のつづきというか、それに対して「leva」さんから、「サイト内リンクをスムーズに移…


トラックバックとは
この記事に言及したサイトをこちらに掲載する仕組みをトラックバックと言います。ここでは、このサイトに頂いたトラックバックを一覧表示しています。
トラックバックしてくださる方へ
この記事への言及がない記事など、トラックバック受信方針に沿っていないものは、読者にお見せしても仕方ないこともあり削除させていただいることをご了承ください。
トラックバックを受け取るためのURI

コメント書き込みフォーム

  • メールアドレスはウェブ上で公開したり、連絡以外で使うことはありません
  • コメントを公開したくないが、作者に連絡を取りたい場合は メールで連絡してください
  • 本文中にHTMLコードは使用できません(URLはそのままお書きください)