<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::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。.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,以实现不同的元素动画顺序。$("main").on("click", "[data-type="page-transition"]", function(event){event.preventDefault();//detect which page has been selectedvar newPage = $(this).attr("href");//if the page is not animating - trigger animationif( !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);});