基于javascript实现漂亮的页面过渡动画效果附源码下载


Posted in Javascript onOctober 26, 2015

用户通过点击页面左侧的菜单,对应的页面加载时伴随着滑动过滤动画,并带有进度条效果。当然页面的加载是Ajax驱动的,整个加载过渡过程非常流畅,非常好的用户体验。

HTML

HTML结构中,.cd-main包含页面主体内容,.cd-side-navigation包含着侧边导航条,#cd-loading-bar则是用来做进度条动画用的。

<nav class="cd-side-navigation"> 
  <ul> 
    <li> 
      <a href="index.html" class="selected" data-menu="index"> 
        <svg><!-- svg content here --></svg> 
        Intro 
      </a> 
    </li> 
    <li> 
      <!-- ... --> 
    </li> 
    <!-- other list items here --> 
  </ul> 
</nav> <!-- .cd-dashboard --> 
<main class="cd-main"> 
  <section class="cd-section index visible"> 
    <header> 
      <div class="cd-title"> 
        <h2>Animated Page Transition #2</h2> 
        <span>Some text here</span> 
      </div> 
      <a href="#index-content" class="cd-scroll">Scroll Down</a> 
    </header> 
    <div class="cd-content" id="index-content"> 
      <!-- content here --> 
    </div> <!-- .cd-content --> 
  </section> <!-- .cd-section --> 
</main> <!-- .cd-main --> 
<div id="cd-loading-bar" data-scale="1" class="index"></div> <!-- lateral loading bar -->

CSS

我们将.cd-side-navigation固定在页面左侧,并且设置它的高度为100%,这样左侧导航菜单就始终占据左侧边栏,右侧主体内容滚动时,左侧导航菜单不动。

.cd-side-navigation { 
 position: fixed; 
 z-index: 3; 
 top: 0; 
 left: 0; 
 height: 100vh; 
 width: 94px; 
 overflow: hidden; 
} 
.cd-side-navigation ul { 
 height: 100%; 
 overflow-y: auto; 
} 
.cd-side-navigation::before { 
 /* background color of the side navigation */ 
 content: ''; 
 position: absolute; 
 top: 0; 
 left: 0; 
 height: 100%; 
 width: calc(100% - 4px); 
 background-color: #131519; 
} 
.cd-side-navigation li { 
 width: calc(100% - 4px); 
} 
.cd-side-navigation a { 
 display: block; 
 position: relative; 
} 
.cd-side-navigation a::after { 
 /* 4px line to the right of the item - visible on hover */ 
 content: ''; 
 position: absolute; 
 top: 0; 
 right: -4px; 
 height: 100%; 
 width: 4px; 
 background-color: #83b0b9; 
 opacity: 0; 
} 
.no-touch .cd-side-navigation a:hover::after { 
 opacity: 1; 
}

JavaScript

当我们点击左侧菜单时,调用triggerAnimation()函数,这个函数会触发加载进度条动画函数loadingBarAnimation(),接着加载页面内容函数:loadNewContent()。

function loadingBarAnimation() { 
  var scaleMax = loadingBar.data('scale'); 
  if( scaleY + 1 < scaleMax) { 
    newScaleValue = scaleY + 1; 
  } 
  // ... 
   
  loadingBar.velocity({ 
    scaleY: newScaleValue 
  }, 100, loadingBarAnimation); 
}

当新页面被选中时,一个新的元素.cd-section将会被创建并且插入到DOM中,然后load()新的url内容。

function loadNewContent(newSection) { 
  var section = $('<section class="cd-section overflow-hidden '+newSection+'"></section>').appendTo(mainContent); 
   
  //load the new content from the proper html file 
  section.load(newSection+'.html .cd-section > *', function(event){ 
     
    loadingBar.velocity({ 
      scaleY: scaleMax //this is the scaleY value to cover the entire window height (100% loaded) 
    }, 400, function(){ 
       
      section.addClass('visible'); 
 
      var url = newSection+'.html'; 
 
      if(url!=window.location){ 
        //add the new page to the window.history 
        window.history.pushState({path: url},'',url); 
      } 
 
      // ... 
    }); 
  }); 
}

通过异步加载的页面要返回上一页历史浏览记录的话,可以点击浏览器上的返回即可。返回上一页同样有过渡动画效果。

Javascript 相关文章推荐
Jquery在IE7下无法使用 $.ajax解决方法
Nov 11 Javascript
jquery select操作的日期联动实现代码
Dec 06 Javascript
基于jQuery的Tab选项框效果代码(插件)
Mar 01 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
Jan 13 Javascript
js取值中form.all和不加all的区别介绍
Jan 20 Javascript
将字符串中由空格隔开的每个单词首字母大写
Apr 06 Javascript
jQuery实现预加载图片的方法
Mar 17 Javascript
基于JavaScript实现智能右键菜单
Mar 02 Javascript
AngularJS创建自定义指令的方法详解
Nov 03 Javascript
mpvue小程序循环动画开启暂停的实现方法
May 15 Javascript
uni-app微信小程序登录授权的实现
May 22 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
Sep 11 Javascript
JS实现的页面自定义滚动条效果
Oct 26 #Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
Oct 26 #Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
Oct 26 #Javascript
javaScript实现可缩放的显示区效果代码
Oct 26 #Javascript
JS基于VML技术实现的五角星礼花效果代码
Oct 26 #Javascript
jquery获取url参数及url加参数的方法
Oct 26 #Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
Oct 26 #Javascript
You might like
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
PHP生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
降低PHP Redis内存占用
2017/03/23 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
django配置连接数据库及原生sql语句的使用方法
2019/03/03 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
总账会计岗位职责
2015/04/02 职场文书
民事上诉状范文
2015/05/22 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL
Python 发送SMTP邮件的简单教程
2021/06/24 Python
OpenCV实现普通阈值
2021/11/17 Java/Android
node快速搭建后台的实现步骤
2022/02/18 NodeJs