基于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 相关文章推荐
(仅IE下有效)关于checkbox 三态
May 12 Javascript
javascript jQuery插件练习
Dec 24 Javascript
CSS+jQuery实现的一个放大缩小动画效果
Sep 24 Javascript
屏蔽script注入小例子
Nov 12 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
Aug 22 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
浅谈javascript中的加减时间
Jul 12 Javascript
20170918 前端开发周报之JS前端开发必看
Sep 18 Javascript
zTree节点文字过多的处理方法
Nov 24 Javascript
详解angularjs4部署文件过大解决过程
Dec 05 Javascript
利用PHP实现递归删除链表元素的方法示例
Oct 23 Javascript
使用Vue实现一个树组件的示例
Nov 06 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
隐藏你的.php文件的实现方法
2007/03/19 PHP
php单例模式示例分享
2015/02/12 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
2015/12/24 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
js 打开新页面在屏幕中间的实现方法
2016/11/02 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
Python部署web开发程序的几种方法
2017/05/05 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
python调用摄像头拍摄数据集
2019/06/01 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
三星英国官网:Samsung英国
2018/09/25 全球购物
考试作弊被抓检讨书
2014/01/10 职场文书
残疾人小组计划书
2014/04/27 职场文书
工作求职信
2014/07/04 职场文书
听证通知书
2015/04/24 职场文书
为什么代码规范要求SQL语句不要过多的join
2021/06/23 MySQL
浅谈MySQL之select优化方案
2021/08/07 MySQL
Go语言基础map用法及示例详解
2021/11/17 Golang
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS