62

ビデオを見ているときに、ロゴまたは関連するビデオをクリックすると、赤いプログレス バー (ロゴの上) が画面上を横切ることに気付きました。同時に、コンテンツを「グレー表示」するためのわずかなオーバーレイがあり、新しいページでフェードインします。参考までに、進行状況バーと遷移が発生する前に、URL が新しい URL に変更されます。

そのバーの div ID は progress です。ある種のクールな jQuery ajax ロードのように見えますが、ページが変わります。知らない。

ここに画像の説明を入力

4

3 に答える 3

47

YouTube はHTML5 History APIを使用して、ページ URL を履歴スタックに追加および削除します。これにより、アドレスバーの URL が変更され、戻る/進むボタンが機能する一方で、実際には JS (ajax) 経由でページが読み込まれます。

この時点で下位互換性を備えた API を実装する最も簡単な方法は、History.jsを使用することです。後方互換性とは、HTML5 History API をまだサポートしていない古いブラウザーのハッシュ タグ メソッドにフォールバックすることを意味します。

History.js のデモをご覧ください。

Twitter はおそらく、ハッシュ化された URL を使用した Web サイトの最も有名な例だと思います。たとえばtwitter.com/#!/username、何年も前からよくある光景です。この方法の問題点は、ハッシュ タグがクライアント側であるため、それらを読み取って適切なコンテンツを提供するには JS が必要なことです。JS 以外のユーザーがハッシュ化された URL をクリックすると、Twitter のホームページが表示されます。

ちなみに、 Beatportは、HTML5 History 技術を使用した最初の主要な Web サイトの 1 つです。SoundCloud も最近実装しました。どちらのサイトも、訪問者がページをブラウズしている間にオーディオを再生できるようにするために、HTML5 の履歴を必要としていました。

于 2013-06-15T22:37:16.013 に答える
10

YouTube は、ダイナミック ナビゲーションに使用するspfjsというライブラリをオープンソース化しました。

構造化ページ フラグメント (略して SPF) は、YouTube からの高速なナビゲーションとページ更新のための軽量な JS フレームワークです。

プログレッシブ エンハンスメントと HTML5 を使用して、SPF はサイトと統合し、ページ全体ではなく、ナビゲーション中に変更されるページのセクションのみを更新することで、より高速で流動的なユーザー エクスペリエンスを実現します。SPF は、ドキュメント フラグメントを送信するための応答形式、スクリプトおよびスタイル管理のための堅牢なシステム、メモリ内キャッシュ、オンザフライ処理などを提供します。

于 2014-08-16T13:15:52.470 に答える
7

このデモを見て、多分あなたを助けることができます、そしてコメントを見てください、いくつかはそれを達成するには複雑すぎると言っています

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();
    });
});
于 2014-01-07T13:35:03.817 に答える