ホームページ > ウェブフロントエンド > jsチュートリアル > jQueryでページ遷移アニメーションの切り替えを実装するeffect_jquery

jQueryでページ遷移アニメーションの切り替えを実装するeffect_jquery

WBOY
リリース: 2016-05-16 15:34:32
オリジナル
1882 人が閲覧しました

制作過程を直接ご紹介しますので、気に入っていただければ幸いです。

HTML 構造

このページ切り替えエフェクトの HTML 構造は、ページのラッピング要素として

を使用し、ページ切り替え時のマスク レイヤを作成します。 -bar は、Ajax ロード中のロード進行状況バーです。

<main>
 <div class="cd-index cd-main-content">
  <div>
   <h1>Page Transition</h1>
   <!-- your content here -->
  </div>
 </div>
</main>
 
<div class="cd-cover-layer"></div> <!-- this is the cover layer -->
 
<div class="cd-loading-bar"></div> <!-- this is the loading bar -->      
ログイン後にコピー

CSS スタイル

このページ切り替えエフェクトは、body::before および body::after 擬似要素を使用して、ページ切り替えプロセス中にページ コンテンツを覆う 2 つのマスク レイヤーを作成します。それらの位置は固定されており、高さは 50vh に等しく、幅は 100% です。デフォルトでは、CSS 変換プロパティ (translateY(-100%)/translateY(100%)) を使用して非表示になります。ユーザーがページを切り替えると、これらの要素は (.page-is-changing クラスを 要素に追加することによって) ビューポートに戻されます。
以下の画像は、このプロセスを示しています:

ページ切り替え効果

body::after, body::before {
 /* these are the 2 half blocks which cover the content once the animation is triggered */
 height: 50vh;
 width: 100%;
 position: fixed;
 left: 0;
}
body::before {
 top: 0;
 transform: translateY(-100%);
}
body::after {
 bottom: 0;
 transform: translateY(100%);
}
body.page-is-changing::after, body.page-is-changing::before {
 transform: translateY(0);
}       
ログイン後にコピー

ページが切り替わるとき、ページ コンテンツのフェードインおよびフェードアウト効果は、div.cd-cover-layer の透明度を変更することによって実現されます。 .cd-main-content 要素を同じ背景色でオーバーレイし、 が .page-is-changing クラスで追加されるときに透明度を 0 から 1 に変更します。
読み込み進行状況バーは、.cd-loading-bar::before 疑似要素を使用して作成されます。デフォルトでは、縮小 (scaleX(0)) され、transform-origin: 左中央になります。ページの切り替えが開始されると、scaleX(1) を使用して元のサイズに拡大されます。

.cd-loading-bar {
 /* this is the loading bar - visible while switching from one page to the following one */
 position: fixed;
 height: 2px;
 width: 90%;
}
.cd-loading-bar::before {
 /* this is the progress bar inside the loading bar */
 position: absolute;
 left: 0;
 top: 0;
 height: 100%;
 width: 100%;
 transform: scaleX(0);
 transform-origin: left center;
}
.page-is-changing .cd-loading-bar::before {
 transform: scaleX(1);
}       
ログイン後にコピー

特殊効果におけるスムーズなトランジション効果は、CSS トランジションを使用して実現されます。異なる要素のアニメーション シーケンスを実現するために、アニメーション化された各要素に異なる遷移遅延が追加されます。
ジャバスクリプト

data-type="page-transition" 属性は、このページ切り替えエフェクトのリンクで使用され、ページ切り替えイベントをトリガーします。プラグインがユーザーのクリック イベントを検出すると、changePage() メソッドが実行されます。

$('main').on('click', '[data-type="page-transition"]', function(event){
  event.preventDefault();
  //detect which page has been selected
  var newPage = $(this).attr('href');
  //if the page is not animating - trigger animation
  if( !isAnimating ) changePage(newPage, true);
});        
ログイン後にコピー

このメソッドは、ページ切り替えアニメーションをトリガーし、loadNewContent() メソッドを通じて新しいコンテンツを読み込みます。

function changePage(url, bool) {
  isAnimating = true;
  // trigger page animation
  $('body').addClass('page-is-changing');
  //...
  loadNewContent(url, bool);
  //...
}        
ログイン後にコピー

新しいコンテンツが読み込まれると、元の

要素のコンテンツが置き換えられます。 .page-is-changing クラスが本文から削除され、新しくロードされたコンテンツが window.history に追加されます (pushState() メソッドを使用)。

function loadNewContent(url, bool) {
  var newSectionName = 'cd-'+url.replace('.html', ''),
   section = $('<div class="cd-main-content '+newSectionName+'"></div>');
    
  section.load(url+' .cd-main-content > *', function(event){
   // load new content and replace <main> content with the new one
    $('main').html(section);
    //...
    $('body').removeClass('page-is-changing');
    //...
 
    if(url != window.location){
     //add the new page to the window.history
     window.history.pushState({path: url},'',url);
    }
 });
}        
ログイン後にコピー

ユーザーがブラウザの「戻る」ボタンをクリックしたときに同じページ切り替えアニメーション効果をトリガーするために、プラグインは Popstate イベントをリッスンし、トリガーされたときに changePage() 関数を実行します。

$(window).on('popstate', function() {
  var newPageArray = location.pathname.split('/'),
    //this is the url of the page to be loaded 
    newPage = newPageArray[newPageArray.length - 1];
  if( !isAnimating ) changePage(newPage);
});        
ログイン後にコピー

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート