您好,欢迎访问一九零五行业门户网

jQuery实现切换页面过渡动画效果

这篇文章主要介绍了关于jquery实现切换页面过渡动画效果,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
这是一款效果非常酷的jquery和css3通过ajax调用切换页面过渡动画特效插件。该页面切换特效使用ajax来动态加载链接内容,在页面加载的时候,使用css3来制作非常酷的页面过渡动画效果。插件中使用pushstate方法来管理浏览器的浏览历史,需要的朋友可以参考下
直接为大家介绍制作过程,希望大家可以喜欢。
html结构
该页面切换特效的html结构使用一个61b85035edf2b42260fdb5632dc5728a元素来作为页面的包裹元素,p.cd-cover-layer用于制作页面切换时的遮罩层,p.cd-loading-bar是进行ajax加载时的loading进度条。
<main> <p class="cd-index cd-main-content"> <p> <h1>page transition</h1> <!-- your content here --> </p> </p></main> <p class="cd-cover-layer"></p> <!-- this is the cover layer --> <p class="cd-loading-bar"></p> <!-- 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);}
页面切换时,页面内容的淡入淡出效果是通过改变p.cd-cover-layer的透明度实现的。它覆盖了.cd-main-content元素,并具有相同的背景色,然后在<body>被添加.page-is-changing class的时候,将透明度从0修改为1。
loading进度条使用.cd-loading-bar::before伪元素来制作。默认它被缩小(scalex(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 = $('<p class="cd-main-content '+newsectionname+'"></p>'); 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);});
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注!
相关推荐:
jquery和css3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
jquery 如何实现一个滑动按钮的开关
关于jquery插件timelinr 实现时间轴特效
以上就是jquery实现切换页面过渡动画效果的详细内容。
其它类似信息

推荐信息