Postal Search APIs & Solutions
Postal Search APIs & Solutions
  • チュートリアル
  • ダイジェスト
  • リファレンス
  • デモ
  • テスト
  • 構築キット
  • with Gadgets
  • with jQuery
  • with Microformats
  • よくある質問
  • お問い合わせ
  • 利用規約
  • フォーラム
  • ブログ
Design by
Studio7designs
opensourcetemplates.org
ホーム > Postal Search Ajax API with jQuery > Interface Elements

Interface Elements の Scrollto でページ内リンクをスムースにする

Interface elements for jQuery の Scrollto を使って、ページ内リンクのジャンプを、スムースにスクロールするようにします。

いわゆる普通のページ内リンクだと、即ジャンプしてしまうので、油断しているとページ内のどこにジャンプしたのか判断できなくなることがありました。が、Scrollto を使ってスクロールするようにしたところ、ページ内リンクの振る舞いが視覚的になり、何が起こっているのか判断しやすくなりました。

Scrollto を使ったスクロールは、次のようなページ内リンクがあったとすると、

<a href="#Postal">Postal オブジェクト</a>

そのスクロール先は、ページ内リンクで指定した # 以降の id を持つ要素になります。ページ内リンクは name 属性を使うことが多いようですが、Scrollto を使うときは id 属性である必要があります。

<a id="Postal"></a>

Interface elements for jQuery のロードは、次のように interface.js を指定するか、

<script type="text/javascript" src="interface.js"></script>

もしくは、次のように iutil.js、ifx.js、ifxscrollto.js を指定します。

<script type="text/javascript" src="iutil.js"></script>
<script type="text/javascript" src="ifx.js"></script>
<script type="text/javascript" src="ifxscrollto.js"></script>

後はページ内リンクを含む要素に対して、ScrollToAnchors メソッドを呼び出すだけで完了です。

ScrollToAnchors メソッドの第1引数はスクロール速度です。'slow'、'normal'、'fast' かミリ秒を数値で指定します。第2引数はスクロールの方向軸です。'vertical' か 'horizontal' を指定します。省略したときは、スクロール先に最短距離で(スクロール先が斜め方向なら斜めに)スクロールします。

<script type="text/javascript">
jQuery(function($) {
  $('#content')
    .find('a[@id]')
      .css('display', 'block')
      .end()
    .ScrollToAnchors('slow');
});
</script>

上の例では a タグを block 要素に変更しています。これは Opera 9 向けの対応です。Opera 9 では スクロール先が inline 要素だと、その要素がスクロール先にならず、ページの先頭にスクロールしてしまいました。Opera 9 を考慮するならスクロール先は block 要素にする必要があります。

ただし、Interface Elements の ScrollToAnchors はページ内外リンクを区別しないため、# を指定したページ外リンクが機能しません。なんてこった。

ScrollToAnchors (ifxscrollto.js) のソースコードは次のとおりです。a 要素の href 属性で # を含むものに click イベントを仕掛けています。このとき、# 以降の文字列をスクロール先の要素の ID として使っています。このように a 要素の href 属性の URL からページ内のリンクか、ページ外のリンクか区別していないため、# 指定のページ外リンクがページ内リンクと判断されます。

    ScrollToAnchors : function(speed, axis, easing) {
      return this.each(
        function()
        {
          jQuery('a[@href*="#"]', this).click(
            function(e)
            {
              parts = this.href.split('#');
              jQuery('#' + parts[1]).ScrollTo(speed, axis, easing);
              return false;
            }
          );
        }
      )
    }

ですので、ScrollToAnchors を使わずに、次のように自前のコードを用意しました。現在のページの URL を location.href から取得し、その URL を基準として、ページ内リンクか、ページ外リンクかを区別するようにしています。そして、ページ内リンクのときだけ ScrollTo を使って、ページ内をスムーススクロールするようにしています。

var pageUrl = location.href.split('#')[0];
$('a[@href]', '#content').each(function() {
  if (this.href.indexOf(pageUrl + '#') == 0) {
    var id = this.href.split('#')[1];
    $(this).click(function() {
      $('#' + id).ScrollTo('slow');
      return false;
    });  
  }
});

関連情報

  • 郵便番号から住所を検索する #1
  • 郵便番号から住所を検索する #2
  • 送信フォームの入力形式を郵便番号に制限する
  • 住所の単語から郵便番号を検索する
  • 住所の単語から郵便番号を検索してその住所を表示する
  • 住所の単語から住所の候補をサジェスト表示する #1
  • 住所の単語から住所の候補をサジェスト表示する #2
  • 住所の単語から住所の候補をサジェスト表示する #3
  • 郵便番号から住所を検索する jQuery lookup プラグイン
  • 住所の単語から郵便番号を検索する jQuery coder プラグイン
  • 指定した処理の実行を後回しにする jQuery later プラグイン
fixedUI プラグイン
  • 画面の下からフィードバックフォームをスライド表示して固定する
jTemplates
  • jTemplates を使ってテンプレートから HTML の貼り付けコードを作成する
Cycle Plugin
  • cycle プラグインとフォートラベル API で旅行写真をシャッフル表示する
Flash Plugin
  • Flash Plugin を使って Youtube の動画を再生する
tablesorter
  • 指定した条件でテーブルの行を並び替える
  • 選択ボックスで指定した列でテーブルの行を並び替える
  • HTML 要素を含む列でテーブルの行を並び替える
  • 並び替えできるテーブルであることをリンクで伝える方法
  • 現在の位置をページ単位でなく行単位で表示する方法
Interface Elements
  • Interface Elements の Carousel とフォートラベル API で旅行写真の 3D ギャラリーを作る
  • Interface Elements の Imagebox とフォートラベル API で旅行写真のギャラリーを作る
  • Interface Elements の Slider で郵便番号を入力してみたが・・・
  • Interface Elements の Slider で旅行写真を拡大(または縮小)表示する
  • Interface Elements の Tooltips をいろいろな要素で使ってみた
  • Interface Elements の Scrollto でページ内リンクをスムースにする
  • Interface Elements の Carousel と YouTube Data API で動画のサムネイルを回転表示する
Selectors
  • セレクタでカンマを使って異なる要素の OR をとる
  • Web ブラウザに依存したコードを書き分ける jQuery Browser Selector プラグイン #1
  • Web ブラウザに依存したコードを書き分ける jQuery Browser Selector プラグイン #2
Events
  • 指定した処理をキューに追加して後でまとめて実行する jQuery Delay プラグイン
DOM Manipulation
  • ページから自ページのリンクを削除してユーザビリティを改善する
  • メソッドチェーンを途切ることなく HTML タグを組み立てる jQuery Tag プラグイン
  • 指定した URL からそのサイトのファビコンを表示する jQuery Favicon プラグイン
AJAX
  • コールバックのイベントハンドリングを容易にする jQuery JSONP プラグイン
Forms with Functions
  • 入力ボックスに郵便番号のマスクを適用する #1
  • 入力ボックスに郵便番号のマスクを適用する #2
  • 検索ボックスでカチカチとキーワード入力を再生する jQuery oogo プラグイン
Using with Other Libraries
  • jQuery のグローバルオブジェクトとオブジェクト書き換えの範囲
  • Prototype $$ メソッドを jQuery Selector で置き換えてみる
Books
  • Learning jQuery: Better Interaction Design and Web Development with Simple Javascript Techniques
  • jQuery Reference Guide: A Comprehensive Exploration of the Popular JavaScript Library
  • jQuery in Action
  • jQuery で作る Ajax アプリケーション
  • 実践! Ajax フレームワーク jQuery
Learning jQuery: Better Interaction Design and Web Development with Simple Javascript Techniques jQuery Reference Guide: A Comprehensive Exploration of the Popular JavaScript Library jQuery in Action jQueryで作る Ajaxアプリケーション 実践!Ajaxフレームワーク jQuery
Resources
  • jQuery のロゴやボタンがいろいろあります
Copyright© 2007 LEARNING RESOURCE LAB and the Postal Search APIs & Solutions team.