国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jQuery實現切換頁面過渡動畫效果

2019-11-20 11:22:48
字體:
來源:轉載
供稿:網友

直接為大家介紹制作過程,希望大家可以喜歡。

HTML結構

該頁面切換特效的HTML結構使用一個<main>元素來作為頁面的包裹元素,div.cd-cover-layer用于制作頁面切換時的遮罩層,div.cd-loading-bar是進行ajax加載時的loading進度條。

<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 transform屬性將它們隱藏起來(translateY(-100%)/translateY(100%))。當用戶切換頁面的時候,這些元素被移動回視口當中(通過在<body>元素上添加.page-is-changing class)。
下面的圖片演示了這個過程:

頁面切換特效

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元素,并具有相同的背景色,然后在<body>被添加.page-is-changing class的時候,將透明度從0修改為1。
Loading進度條使用.cd-loading-bar::before偽元素來制作。默認它被縮?。╯caleX(0))和transform-origin: left center。當頁面切換開始時它被使用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 Transitions來實現。每一個動畫元素都被添加了不同的transition-delay,以實現不同的元素動畫順序。
 JAVASCRIPT

該頁面切換特效中在鏈接上使用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);  //...}        

當新的內容被加載后,會替代原來<main>元素中的內容。.page-is-changing class被從body中移除,新加載的內容會被添加到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);});        

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永新县| 泰州市| 宜川县| 宁南县| 迁西县| 西青区| 琼海市| 南昌市| 潼南县| 山东| 华亭县| 玉树县| 象山县| 揭西县| 内丘县| 成安县| 武鸣县| 朝阳区| 宣城市| 秦皇岛市| 松潘县| 双鸭山市| 沧州市| 丹江口市| 拉萨市| 蓬安县| 壤塘县| 曲阜市| 沿河| 任丘市| 灵武市| 庆安县| 广元市| 永川市| 木兰县| 霍林郭勒市| 镇安县| 阆中市| 花莲市| 鄂托克前旗| 普兰县|