ビデオを見ているときに、ロゴまたは関連するビデオをクリックすると、赤いプログレス バー (ロゴの上) が画面上を横切ることに気付きました。同時に、コンテンツを「グレー表示」するためのわずかなオーバーレイがあり、新しいページでフェードインします。参考までに、進行状況バーと遷移が発生する前に、URL が新しい URL に変更されます。
そのバーの div ID は progress です。ある種のクールな jQuery ajax ロードのように見えますが、ページが変わります。知らない。
ビデオを見ているときに、ロゴまたは関連するビデオをクリックすると、赤いプログレス バー (ロゴの上) が画面上を横切ることに気付きました。同時に、コンテンツを「グレー表示」するためのわずかなオーバーレイがあり、新しいページでフェードインします。参考までに、進行状況バーと遷移が発生する前に、URL が新しい URL に変更されます。
そのバーの div ID は progress です。ある種のクールな jQuery ajax ロードのように見えますが、ページが変わります。知らない。
YouTube はHTML5 History APIを使用して、ページ URL を履歴スタックに追加および削除します。これにより、アドレスバーの URL が変更され、戻る/進むボタンが機能する一方で、実際には JS (ajax) 経由でページが読み込まれます。
この時点で下位互換性を備えた API を実装する最も簡単な方法は、History.jsを使用することです。後方互換性とは、HTML5 History API をまだサポートしていない古いブラウザーのハッシュ タグ メソッドにフォールバックすることを意味します。
Twitter はおそらく、ハッシュ化された URL を使用した Web サイトの最も有名な例だと思います。たとえばtwitter.com/#!/username
、何年も前からよくある光景です。この方法の問題点は、ハッシュ タグがクライアント側であるため、それらを読み取って適切なコンテンツを提供するには JS が必要なことです。JS 以外のユーザーがハッシュ化された URL をクリックすると、Twitter のホームページが表示されます。
ちなみに、 Beatportは、HTML5 History 技術を使用した最初の主要な Web サイトの 1 つです。SoundCloud も最近実装しました。どちらのサイトも、訪問者がページをブラウズしている間にオーディオを再生できるようにするために、HTML5 の履歴を必要としていました。
YouTube は、ダイナミック ナビゲーションに使用するspfjsというライブラリをオープンソース化しました。
構造化ページ フラグメント (略して SPF) は、YouTube からの高速なナビゲーションとページ更新のための軽量な JS フレームワークです。
プログレッシブ エンハンスメントと HTML5 を使用して、SPF はサイトと統合し、ページ全体ではなく、ナビゲーション中に変更されるページのセクションのみを更新することで、より高速で流動的なユーザー エクスペリエンスを実現します。SPF は、ドキュメント フラグメントを送信するための応答形式、スクリプトおよびスタイル管理のための堅牢なシステム、メモリ内キャッシュ、オンザフライ処理などを提供します。
このデモを見て、多分あなたを助けることができます、そしてコメントを見てください、いくつかはそれを達成するには複雑すぎると言っています
html:
<div>
<dt></dt>
<dd></dd>
</div>
CSS:
#progress {
position: fixed;
z-index: 2147483647;
top: 0;
left: -6px;
width: 1%;
height: 2px;
background: #0088CC;
-moz-border-radius: 1px;
-webkit-border-radius: 1px;
border-radius: 1px;
-moz-transition: width 500ms ease-out,opacity 400ms linear;
-ms-transition: width 500ms ease-out,opacity 400ms linear;
-o-transition: width 500ms ease-out,opacity 400ms linear;
-webkit-transition: width 500ms ease-out,opacity 400ms linear;
transition: width 500ms ease-out,opacity 400ms linear;
}
#progress dd, #progress dt {
position: absolute;
top: 0;
height: 2px;
-moz-box-shadow: #0088CC 1px 0 6px 1px;
-ms-box-shadow: #0088CC 1px 0 6px 1px;
-webkit-box-shadow: #0088CC 1px 0 6px 1px;
box-shadow: #0088CC 1px 0 6px 1px;
-moz-border-radius: 100%;
-webkit-border-radius: 100%;
border-radius: 100%;
}
#progress dt {
opacity: .6;
width: 180px;
right: -80px;
clip: rect(-6px,90px,14px,-6px);
}
#progress dd {
opacity: .6;
width: 20px;
right: 0;
clip: rect(-6px,22px,14px,10px);
}
js:
$(document).ajaxStart(function() {
//only add progress bar if added yet.
if ($("#progress").length === 0) {
$("body").append($("<div><dt/><dd/></div>").attr("id", "progress"));
$("#progress").width((50 + Math.random() * 30) + "%");
}
});
$(document).ajaxComplete(function() {
//End loading animation
$("#progress").width("101%").delay(200).fadeOut(400, function() {
$(this).remove();
});
});