Pace.jsを使用したブラウザのローディングエフェクト

Pace.jsは、ウェブページの読み込み状態を示すための進捗バーを提供するJavaScriptライブラリです。このライブラリは自動的にAJAXリクエスト、イベントループの遅延、ドキュメントの読み込み状態、およびページ上の要素を監視します。

インクルード方法

Pace.jsとテーマCSSをページに含めます。

<head>
  <script src="/path/to/pace.js"></script>
  <link href="/path/to/your-theme.css" rel="stylesheet" />
</head>

設定

Pace.jsはデフォルトで自動的に動作しますが、カスタマイズが必要な場合は以下のオプションを使用できます。

JavaScriptでの設定

window.paceOptions = {
  elements: false,
  restartOnRequestAfter: false
};

スクリプトタグでの設定

<script data-pace-options='{ "ajax": false }' src='pace.js'></script>

AMDまたはBrowserifyを使用する場合

define(['pace'], function(pace){
  pace.start({
    document: false
  });
});

コレクター

Pace.jsは、ページの進行状況を収集するために4つのデフォルトコレクターを持っています。

  • Ajax: ページ上のすべてのAJAXリクエストを監視
  • Elements: 特定の要素の存在をチェック
  • Document: ドキュメントの読み込み状態をチェック
  • Event Lag: イベントループの遅延をチェック

これらのコレクターは、以下のオプションで構成または無効化できます。

window.paceOptions = {
  ajax: false, // 無効化
  document: false, // 無効化
  eventLag: false, // 無効化
  elements: {
    selectors: ['.my-page']
  }
};

カスタムソースの追加

独自のソースを追加するには、extraSourcesにクラスを追加します。

window.paceOptions = {
  extraSources: [yourCustomSource]
};

API

Pace.jsは以下のメソッドを公開しています。

  • Pace.start: 進行バーを表示し、更新を開始
  • Pace.restart: 進行バーを再表示し、進行状況をリセット
  • Pace.stop: 進行バーを非表示にし、更新を停止
  • Pace.track: 特定のリクエストを明示的に追跡
  • Pace.ignore: 特定のリクエストを明示的に無視

イベント

Pace.jsは以下のイベントをトリガーします。

  • start: Paceが初期化されたとき
  • stop: Paceが手動で停止されたとき
  • restart: Paceが再起動されたとき
  • done: Paceが完了したとき
  • hide: 進行バーが非表示になったとき

イベントハンドラをバインドするには、以下のメソッドを使用します。

  • Pace.on(event, handler, [context])
  • Pace.off(event, [handler])
  • Pace.once(event, handler, [context])

AJAXの追跡

デフォルトでは、Pace.jsはAJAXリクエストを追跡します。特定のリクエストを無視するには以下のコードを使用します。

Pace.ignore(function(){
  $.ajax(...)
});

特定のリクエストを強制的に追跡するには以下のコードを使用します。

Pace.track(function(){
  $.ajax(...)
});

URLパターンに基づいて特定のリクエストを無視することもできます。

window.paceOptions = {
  ajax: {
    ignoreURLs: ['some-substring', /some-regexp/]
  }
};

互換性

Pace.jsはIE8+(標準モード)、FF 3.5+、Chrome、Safari 4+、Opera 10.5+、および現代のモバイルブラウザをサポートしています。

テーマ

Pace.jsには多くのテーマが用意されています。適切なCSSファイルをインクルードすることで使用できます。

例: Flash Theme

.pace {
  -webkit-pointer-events: none;
  pointer-events: none;
  -webkit-user-select: none;
  -moz-user-select: none;
  user-select: none;
}

.pace-inactive {
  display: none;
}

.pace .pace-progress {
  background: #29d;
  position: fixed;
  z-index: 2000;
  top: 0;
  right: 100%;
  width: 100%;
  height: 2px;
}

.pace .pace-progress-inner {
  display: block;
  position: absolute;
  right: 0px;
  width: 100px;
  height: 100%;
  box-shadow: 0 0 10px #29d, 0 0 5px #29d;
  opacity: 1.0;
  -webkit-transform: rotate(3deg) translate(0px, -4px);
  -moz-transform: rotate(3deg) translate(0px, -4px);
  -ms-transform: rotate(3deg) translate(0px, -4px);
  -o-transform: rotate(3deg) translate(0px, -4px);
  transform: rotate(3deg) translate(0px, -4px);
}

.pace .pace-activity {
  display: block;
  position: fixed;
  z-index: 2000;
  top: 15px;
  right: 15px;
  width: 14px;
  height: 14px;
  border: solid 2px transparent;
  border-top-color: #29d;
  border-left-color: #29d;
  border-radius: 10px;
  -webkit-animation: pace-spinner 400ms linear infinite;
  -moz-animation: pace-spinner 400ms linear infinite;
  -ms-animation: pace-spinner 400ms linear infinite;
  -o-animation: pace-spinner 400ms linear infinite;
  animation: pace-spinner 400ms linear infinite;
}

@-webkit-keyframes pace-spinner {
  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }
  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}
@-moz-keyframes pace-spinner {
  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }
  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }
}
@-o-keyframes pace-spinner {
  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }
  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }
}
@-ms-keyframes pace-spinner {
  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }
  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }
}
@keyframes pace-spinner {
  0% { transform: rotate(0deg); transform: rotate(0deg); }
  100% { transform: rotate(360deg); transform: rotate(360deg); }
}

他のテーマも同様にCSSファイルをインクルードすることで使用できます。

タグ: pace.js javascript CSS ローディングエフェクト AJAX

6月29日 00:22 投稿