Maison >interface Web >js tutoriel >jQuery implémente l'animation de transition de page de changement effect_jquery

jQuery implémente l'animation de transition de page de changement effect_jquery

WBOY
WBOYoriginal
2016-05-16 15:34:321867parcourir

Je vais vous présenter directement le processus de production, j'espère que vous l'aimerez.

Structure HTML

La structure HTML de cet effet de changement de page utilise un élément 61b85035edf2b42260fdb5632dc5728a comme élément d'habillage de la page. div.cd-cover-layer est utilisé pour créer le calque de masque lors du chargement de div.cd. -bar est la barre de progression du chargement pendant le chargement 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 -->      

Style CSS

Cet effet de changement de page utilise les pseudo-éléments body::before et body::after pour créer deux calques de masque pour couvrir le contenu de la page pendant le processus de changement de page. Leur positionnement est fixe, avec une hauteur égale à 50vh et une largeur de 100%. Par défaut, ils sont masqués à l'aide de la propriété CSS transform (translateY(-100%)/translateY(100%)). Lorsque l'utilisateur change de page, ces éléments sont replacés dans la fenêtre d'affichage (en ajoutant la classe .page-is-changing à l'élément 6c04bd5ca3fcae76e30b72ad730ca86d).
L'image ci-dessous illustre ce processus :

Effets de changement de page

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);
}       

Lorsque la page change, l'effet de fondu entrant et sortant du contenu de la page est obtenu en modifiant la transparence de div.cd-cover-layer. Il superpose l'élément .cd-main-content avec la même couleur d'arrière-plan, puis modifie la transparence de 0 à 1 lorsque l'élément 6c04bd5ca3fcae76e30b72ad730ca86d est ajouté avec la classe .page-is-changing.
La barre de progression du chargement est réalisée à l'aide du pseudo-élément .cd-loading-bar::before. Par défaut, il est réduit (scaleX(0)) et transform-origin : left center. Lorsque le changement de page commence, il est agrandi à sa taille d'origine à l'aide de 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);
}       

Les effets de transition fluides dans les effets spéciaux sont obtenus à l'aide de transitions CSS. Différents délais de transition sont ajoutés à chaque élément animé pour obtenir différentes séquences d'animation d'éléments.
JAVASCRIPT

L'attribut data-type="page-transition" est utilisé sur le lien dans cet effet de changement de page pour déclencher l'événement de changement de page. Lorsque le plug-in détecte un événement de clic utilisateur, la méthode changePage() sera exécutée.

$('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);
});        

Cette méthode déclenchera l'animation de changement de page et chargera le nouveau contenu via la méthode loadNewContent().

function changePage(url, bool) {
  isAnimating = true;
  // trigger page animation
  $('body').addClass('page-is-changing');
  //...
  loadNewContent(url, bool);
  //...
}        

Lorsque un nouveau contenu est chargé, il remplacera le contenu de l'élément 61b85035edf2b42260fdb5632dc5728a La classe .page-is-changing est supprimée du corps et le contenu nouvellement chargé est ajouté à window.history (à l'aide de la méthode 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);
    }
 });
}        

Afin de déclencher le même effet d'animation de changement de page lorsque l'utilisateur clique sur le bouton Précédent du navigateur, le plug-in écoute l'événement popstate et exécute la fonction changePage() lorsqu'il est déclenché.

$(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);
});        

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn