使用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函数的延迟加载实现代码
Oct 11 Javascript
用jquery实现输入框获取焦点消失文字
Apr 27 Javascript
js模仿hover的具体实现代码
Dec 30 Javascript
js 截取或者替换字符串中的数字实现方法
Jun 13 Javascript
jquery 中toggle的2种用法详解(推荐)
Sep 02 Javascript
JS实现旋转木马式图片轮播效果
Jan 18 Javascript
JS数组搜索之折半搜索实现方法分析
Mar 27 Javascript
浅谈angularjs依赖服务注入写法的注意点
Apr 24 Javascript
原生JS实现的碰撞检测功能示例
May 18 Javascript
详解ES6 Promise对象then方法链式调用
Oct 20 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
Jul 31 Javascript
Vue Render函数原理及代码实例解析
Jul 30 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
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
使用PHP开发留言板功能
2019/11/19 PHP
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
javascript中scrollTop详解
2015/04/13 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
实例讲解Python中函数的调用与定义
2016/03/14 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
教育学专业实习生的自我鉴定
2013/11/26 职场文书
公益活动策划方案
2014/01/09 职场文书
关于是否需要写商业计划书
2014/02/07 职场文书
单位接收函格式
2015/01/30 职场文书
焦裕禄观后感
2015/06/03 职场文书
百万英镑观后感
2015/06/09 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
Java实现简单小画板
2022/06/10 Java/Android