>웹 프론트엔드 >JS 튜토리얼 >jQuery는 전환 페이지 전환 애니메이션을 구현합니다.

jQuery는 전환 페이지 전환 애니메이션을 구현합니다.

WBOY
WBOY원래의
2016-05-16 15:34:321866검색

제작과정을 직접 소개해드리니 마음에 드셨으면 좋겠습니다.

HTML 구조

이 페이지 전환 효과의 HTML 구조는 페이지의 래핑 요소로 div.cd-cover-layer를 사용하여 페이지 전환 시 마스크 레이어를 만듭니다. -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 유사 요소를 사용하여 페이지 전환 프로세스 중에 페이지 콘텐츠를 덮는 두 개의 마스크 레이어를 생성합니다. 위치는 높이가 50vh이고 너비가 100%로 고정되어 있습니다. 기본적으로 CSS 변환 속성(translateY(-100%)/translateY(100%))을 사용하여 숨겨집니다. 사용자가 페이지를 전환하면 이러한 요소는 .page-is-changing 클래스를 6c04bd5ca3fcae76e30b72ad730ca86d 요소에 추가하여 뷰포트로 다시 이동됩니다.
아래 이미지는 이 과정을 보여줍니다.

페이지 전환 효과

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 요소를 동일한 배경색으로 오버레이한 다음 6c04bd5ca3fcae76e30b72ad730ca86d에 .page-is-changing 클래스를 추가하면 투명도가 0에서 1로 변경됩니다.
로딩 진행률 표시줄은 .cd-loading-bar::before 의사 요소를 사용하여 만들어집니다. 기본적으로 크기가 축소되고(scaleX(0)) 변형 원본: 왼쪽 중앙입니다. 페이지 전환이 시작되면 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);
  //...
}        

새 콘텐츠가 로드되면 원본 61b85035edf2b42260fdb5632dc5728a 요소의 콘텐츠가 대체됩니다. .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);
});        

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.