jQuery實現(xiàn)切換頁面過渡動畫效果
直接為大家介紹制作過程,希望大家可以喜歡。
HTML結(jié)構(gòu)
該頁面切換特效的HTML結(jié)構(gòu)使用一個<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偽元素在頁面切換過程中創(chuàng)建兩個遮罩層來遮住頁面內(nèi)容。它們的定位是固定定位,高度等于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); }
頁面切換時,頁面內(nèi)容的淡入淡出效果是通過改變div.cd-cover-layer的透明度實現(xiàn)的。它覆蓋了.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來實現(xiàn)。每一個動畫元素都被添加了不同的transition-delay,以實現(xiàn)不同的元素動畫順序。
JAVASCRIPT
該頁面切換特效中在鏈接上使用data-type="page-transition"屬性,用于觸發(fā)頁面切換事件。當插件檢測到用戶點擊事件,changePage()方法將被執(zhí)行。
$('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); });
這個方法會觸發(fā)頁面切換動畫,并通過loadNewContent()方法加載新內(nèi)容。
function changePage(url, bool) { isAnimating = true; // trigger page animation $('body').addClass('page-is-changing'); //... loadNewContent(url, bool); //... }
當新的內(nèi)容被加載后,會替代原來<main>元素中的內(nèi)容。.page-is-changing class被從body中移除,新加載的內(nèi)容會被添加到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); } }); }
為了在用戶點擊瀏覽器的回退按鈕時觸發(fā)相同的頁面切換動畫效果,插件中監(jiān)聽popstate事件,并在它觸發(fā)時執(zhí)行changePage()函數(shù)。
$(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); });
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
通過jquery.cookie.js實現(xiàn)記住用戶名、密碼登錄功能
這篇文章主要介紹了通過jquery.cookie.js實現(xiàn)記住用戶名、密碼登錄功能,通過Cookies讓網(wǎng)站服務器把少量數(shù)據(jù)儲存到客戶端的硬盤或內(nèi)存,從客戶端的硬盤讀取數(shù)據(jù)的一種技術;具體實現(xiàn)過程大家通過本文一起看看吧2018-06-06jquery實現(xiàn)頁面百葉窗走馬燈式翻滾顯示效果的方法
這篇文章主要介紹了jquery實現(xiàn)頁面百葉窗走馬燈式翻滾顯示效果的方法,實例分析了jQuery操作百葉窗翻滾效果的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03jQuery實現(xiàn)每隔一段時間自動更換樣式的方法分析
這篇文章主要介紹了jQuery實現(xiàn)每隔一段時間自動更換樣式的方法,結(jié)合實例形式較為詳細的分析了jQuery結(jié)合時間函數(shù)動態(tài)修改頁面元素屬性相關操作技巧,需要的朋友可以參考下2018-05-05