使用AngularJS实现可伸缩的页面切换的方法


Posted in Javascript onJune 19, 2015

AngularJS 1.2 通过引入基于纯CSS class的切换和动画,在一个单页面应用创建页面到页面的切换变得更加的容易。只需要使用一个ng-view,让我们来看一下,一个引入众多的不同切换的可伸缩方法,以及指定的每个页面如何切入和切出。

演示: http://embed.plnkr.co/PqhvmW/preview

首先,标记:
 

<div class="page-container">
  <div ng-view class="page-view" ng-class="pageAnimationClass"> </div>
 </div>
既然ng-view使用进入/离开动画,那么就能简单地在DOM里使用两个 ng-view 元素来进行新视图切入和旧视图切出。因此,我们在使用相对定位的 page-container 元素里,使用绝对定位建立了ng-view,从而支持任意一种定位切换。

'go' 方法

在单页面应用里,我们仍想启用通过URL导航和确保浏览器的回退和下一步按钮如预期的功能。所以一旦我们在$routeProvider设好我们的路由,模板,控制器(可选的解析),我们可以在一个 ng-click 里使用一个相对路径来直接切换页面:
 

<a ng-click="/page2">Go to page 2</a>

那样也可以工作,但是我们需要在ng-view 硬编码指定切换一个class 。以此代替,让我们在 $rootScope 上创建一个 'go' 方法,可以让我们指定一个路径和一个像这样的切换:
 

<a ng-click="go('/page2', 'slideLeft')">Go to page 2</a>

这是我们 $rootScope 'go' 方法:
 

$rootScope.go = function (path, pageAnimationClass) {
 
  if (typeof(pageAnimationClass) === 'undefined') { // Use a default, your choice
    $rootScope.pageAnimationClass = 'crossFade';
  }
     
  else { // Use the specified animation
    $rootScope.pageAnimationClass = pageAnimationClass;
  }
 
  if (path === 'back') { // Allow a 'back' keyword to go to previous page
    $window.history.back();
  }
     
  else { // Go to the specified path
    $location.path(path);
  }
};

现在,任何你第二个参数指定的 切换类 将会添加到 ng-view 并且 go 方法将会用指定的第一个参数改变页面路径。

切换类

接下来要做的就是创建一个任意数量的切换类,并使用 ngAnimate module 提供的钩子,例如:
 

/* slideLeft */
.slideLeft {
  transition-timing-function: ease;
  transition-duration: 250ms;
}
 
.slideLeft.ng-enter {
  transition-property: none;
  transform: translate3d(100%,0,0);
}
 
.slideLeft.ng-enter.ng-enter-active {
  transition-property: all;
  transform: translate3d(0,0,0);
}
 
.slideLeft.ng-leave {
  transition-property: all;
  transform: translate3d(0,0,0);
}
 
.slideLeft.ng-leave.ng-leave-active {
  transition-property: all;
  transform: translate3d(-100%,0,0);
}

Javascript 相关文章推荐
JS 字符串连接[性能比较]
May 10 Javascript
javascript 异步页面查询实现代码(asp.net)
May 26 Javascript
jQuery中:text选择器用法实例
Jan 03 Javascript
jQuery中map()方法用法实例
Jan 06 Javascript
javascript获取当前鼠标坐标的方法
Jan 10 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
Jun 09 Javascript
BootStrap智能表单实战系列(七)验证的支持
Jun 13 Javascript
Bootstrap前端开发案例二
Jun 17 Javascript
jquery实现界面无刷新加载登陆注册
Jul 30 Javascript
jQuery中get方法用法分析
Dec 07 Javascript
vue+axios新手实践实现登陆的示例代码
Jun 06 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
Nov 06 Javascript
使用AngularJS实现表单向导的方法
Jun 19 #Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
Jun 19 #Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
Jun 19 #Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
Jun 19 #Javascript
使用ngView配合AngularJS应用实现动画效果的方法
Jun 19 #Javascript
Backbone.js的Hello World程序实例
Jun 19 #Javascript
使用AngularJS处理单选框和复选框的简单方法
Jun 19 #Javascript
You might like
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
不要轻信 PHP_SELF的安全问题
2009/09/05 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
JavaScript中标识符提升问题
2015/06/11 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
Bootstrap基本组件学习笔记之列表组(11)
2016/12/07 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
浅谈layui 表单元素的选中问题
2019/10/25 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
在漏洞利用Python代码真的很爽
2007/08/26 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
python实现八大排序算法(1)
2017/09/14 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
python实现自动登录后台管理系统
2018/10/18 Python
eclipse创建python项目步骤详解
2019/05/10 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
美国用餐电影院:Alamo Drafthouse Cinema
2020/01/23 全球购物
创业计划书六个要素
2013/12/26 职场文书
高校十八大报告感想
2014/01/27 职场文书
销售经理工作职责
2014/02/03 职场文书
业务内勤岗位职责
2014/04/30 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
中考学习决心书
2015/02/04 职场文书
女方离婚起诉书
2015/05/18 职场文书
在人间读书笔记
2015/06/30 职场文书
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL
实例详解Python的进程,线程和协程
2022/03/13 Python
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android