使用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 相关文章推荐
鼠标移动到一张图片时变为另一张图片
Dec 05 Javascript
用js实现键盘方向键翻页功能的代码
Jun 03 Javascript
JavaScript 继承详解(三)
Jul 13 Javascript
JavaScript高级程序设计 扩展--关于动态原型
Nov 09 Javascript
jQuery1.6 使用方法一
Nov 23 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
Apr 12 Javascript
Javascript 实现的数独解题算法网页实例
Oct 15 Javascript
js兼容火狐获取图片宽和高的方法
May 21 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
Aug 03 Javascript
jquery表单插件Autotab使用方法详解
Jun 24 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
Apr 19 jQuery
jQuery中ajax请求后台返回json数据并渲染HTML的方法
Aug 08 jQuery
使用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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
2017/06/09 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
Python实现端口复用实例代码
2014/07/03 Python
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
python 调试冷知识(小结)
2019/11/11 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
python将unicode和str互相转化的实现
2020/05/11 Python
Python 实现一个简单的web服务器
2021/01/03 Python
在C#中如何实现多态
2014/07/02 面试题
三分钟演讲稿范文
2014/04/24 职场文书
工商管理自荐书
2014/07/06 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
亮剑观后感600字
2015/06/05 职场文书
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js