1.切换目录

git checkout step-12
npm start

2.效果图

这里在点击右边的缩略图时,会有一个很明显的从下向上的动画过程.

3.代码实现:

step11和step12之间的代码差异:https://github.com/angular/angular-phonecat/compare/step-11...step-12

Dependencies(依赖的js库):

bower.json

{
"name": "angular-seed",
"description": "A starter project for AngularJS",
"version": "0.0.0",
"homepage": "https://github.com/angular/angular-seed",
"license": "MIT",
"private": true,
"dependencies": {
"angular": "1.2.x",
"angular-mocks": "~1.2.x",
"bootstrap": "~3.1.1",
"angular-route": "~1.2.x",
"angular-resource": "~1.2.x",
"jquery": "1.10.2",
"angular-animate": "~1.2.x"
}
}

注:angular-animate需要单独下载,这里使用命令npm install或者 bower install即可下载 angular-animate.js

如果需要更多动画可以结合Jquery中的动画去实现需求.

angularjs中是如何实现动画的? 可以参考API:https://docs.angularjs.org/guide/animations

Template(模板)

首先,引入angular-animate.js文件,如下:

...
<!-- for CSS Transitions and/or Keyframe Animations -->
<link rel="stylesheet" href="css/animations.css">
...
<!-- jQuery is used for JavaScript animations (include this before angular.js) -->
<script src="bower_components/jquery/jquery.js"></script>
...
<!-- required module to enable animation support in AngularJS -->
<script src="bower_components/angular-animate/angular-animate.js"></script> <!-- for JavaScript Animations -->
<script src="js/animations.js"></script> ...

其API可以参考:ngAnimate

Module & Animations(组件和动画)

app/js/animations.js.

angular.module('phonecatAnimations', ['ngAnimate']);
// ...
// this module will later be used to define animations
// ...

app/js/app.js

// ...
angular.module('phonecatApp', [
'ngRoute', 'phonecatAnimations',
'phonecatControllers',
'phonecatFilters',
'phonecatServices',
]);
// ...

现在,动画效果已经被唤醒了.

Animating ngRepeat with CSS Transition Animations(使用CSS过渡效果去实现动画效果)

<ul class="phones">
<li ng-repeat="phone in phones | filter:query | orderBy:orderProp"
class="thumbnail phone-listing">
<a href="#/phones/{{phone.id}}" class="thumb"><img ng-src="{{phone.imageUrl}}"></a>
<a href="#/phones/{{phone.id}}">{{phone.name}}</a>
<p>{{phone.snippet}}</p>
</li>
</ul>

app/css/animations.css

.phone-listing.ng-enter,
.phone-listing.ng-leave,
.phone-listing.ng-move {
-webkit-transition: 0.5s linear all;
-moz-transition: 0.5s linear all;
-o-transition: 0.5s linear all;
transition: 0.5s linear all;
} .phone-listing.ng-enter,
.phone-listing.ng-move {
opacity:;
height:;
overflow: hidden;
} .phone-listing.ng-move.ng-move-active,
.phone-listing.ng-enter.ng-enter-active {
opacity:;
height: 120px;
} .phone-listing.ng-leave {
opacity:;
overflow: hidden;
} .phone-listing.ng-leave.ng-leave-active {
opacity:;
height:;
padding-top:;
padding-bottom:;
}

这里都是通过class去定位元素的,那么class是何时被创建的?

  • ng-enter  class 主要用于新添加的手机并渲染到页面中.
  • ng-move  class 主要用于当元素被移动时.
  • ng-leave  class主要用于被删除时.

手机列表被添加和删除依赖于ng-repeat指令,例如,如果过滤数据时,手机列表会动态的出现列表中.

  1. starting class表示一个将要开始的动画
  2. active class 表示一个将要结束的动画

在我们上面的例子中,元素的高度变化从0到120像素当手机被添加和移除时,同样有一个淡入淡出的效果,所有这些效果都是CSS transitions (CSS 转换器)实现的.CSS transitions 和 CSS animations对于目前主流的浏览器绝大部分都有着很好的支持,除了IE 9及其更低版本,如果想要一些动画效果可以尝试基本Javascript的动画.

ngView

app/index.html.

<div class="view-container">
<div ng-view class="view-frame"></div>
</div>

With this change, the ng-view directive is nested inside a parent element with a view-container CSS class. This class adds aposition: relative style so that the positioning of the ng-view is relative to this parent as it animates transitions.

这里使用ng-view代替ng-repeat,在这里,ng-view指令被嵌套入一个view-container CSS类,这个类(class)添加了一个相对路径以便其动画效果可以动态显现.下面将看其动画的具体实现:

app/css/animations.css.

.view-container {
position: relative;
} .view-frame.ng-enter, .view-frame.ng-leave {
background: white;
position: absolute;
top:;
left:;
right:;
} .view-frame.ng-enter {
-webkit-animation: 0.5s fade-in;
-moz-animation: 0.5s fade-in;
-o-animation: 0.5s fade-in;
animation: 0.5s fade-in;
z-index:;
} .view-frame.ng-leave {
-webkit-animation: 0.5s fade-out;
-moz-animation: 0.5s fade-out;
-o-animation: 0.5s fade-out;
animation: 0.5s fade-out;
z-index:;
} @keyframes fade-in {
from { opacity:; }
to { opacity:; }
}
@-moz-keyframes fade-in {
from { opacity:; }
to { opacity:; }
}
@-webkit-keyframes fade-in {
from { opacity:; }
to { opacity:; }
} @keyframes fade-out {
from { opacity:; }
to { opacity:; }
}
@-moz-keyframes fade-out {
from { opacity:; }
to { opacity:; }
}
@-webkit-keyframes fade-out {
from { opacity:; }
to { opacity:; }
}

使用ngClass结合Javascript来实现动画效果

app/partials/phone-detail.html

<div class="phone-images">
<img ng-src="{{img}}"
class="phone"
ng-repeat="img in phone.images"
ng-class="{active:mainImageUrl==img}">
</div> <h1>{{phone.name}}</h1> <p>{{phone.description}}</p> <ul class="phone-thumbs">
<li ng-repeat="img in phone.images">
<img ng-src="{{img}}" ng-mouseenter="setImage(img)">
</li>
</ul>

动画的原理是在于"动",主要是位置或形态的改变产生的动的画面的过程.

其CSS样式如下:
app/css/app.css

.phone-images {
background-color: white;
width: 450px;
height: 450px;
overflow: hidden;
position: relative;
float: left;
} ... img.phone {
float: left;
margin-right: 3em;
margin-bottom: 2em;
background-color: white;
padding: 2em;
height: 400px;
width: 400px;
display: none;
} img.phone:first-child {
display: block;
}

这里主要用的是Jquery里的动画实现的,可以查看其API 查看更多动画: jQuery documentation.

AngularJS学习--- 动画操作 (Applying Animations) ngAnimate step 12的更多相关文章

  1. 动画操作 (Applying Animations) ngAnimate12

    动画操作 (Applying Animations) ngAnimate step 12 1.切换目录 git checkout step-12 npm start 2.效果图 这里在点击右边的缩略图 ...

  2. AngularJs学习笔记--directive

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/directive Directive是教HTML玩一些新把戏的途径.在DOM编译期间,directiv ...

  3. 【总结整理】JQuery基础学习---动画

    jQuery中隐藏元素的hide方法 让页面上的元素不可见,一般可以通过设置css的display为none属性.但是通过css直接修改是静态的布局,如果在代码执行的时候,一般是通过js控制元素的st ...

  4. AngularJs学习总结-了解基本特性(-)

    现在的前端项目中基本上都会用到angularjs框架,之前并不了解这个框架,也是因为最近接手的项目,所以打算好好的学习下它.之前都是搞pc端,现在接手的是移动端的项目,移动端UI框架用的是ionic+ ...

  5. [整理]AngularJS学习资源

    https://angular.io/docs/js/latest/(2.0官方网站) http://www.linuxidc.com/Linux/2014-05/102139.htm(Angular ...

  6. 【AngularJS学习笔记】02 小杂烩及学习总结

    表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> < ...

  7. AngularJs学习笔记--bootstrap

    AngularJs学习笔记系列第一篇,希望我可以坚持写下去.本文内容主要来自 http://docs.angularjs.org/guide/ 文档的内容,但也加入些许自己的理解与尝试结果. 一.总括 ...

  8. AngularJs学习笔记--concepts(概念)

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/concepts 继续.. 一.总括 本文主要是angular组件(components)的概览,并说明 ...

  9. AngularJS学习笔记2——AngularJS的初始化

    本文主要介绍AngularJS的自动初始化以及在必要的适合如何手动初始化. Angular <script> Tag 下面通过一小段代码来介绍推荐的自动初始化过程: <!doctyp ...

随机推荐

  1. android国际化操作

    1.简单介绍 我们知道在java中通过.properties文件来配置资源文件,一般用的有中文message_zh_CN.properties和英文message_en_US.properties两个 ...

  2. git配置管理

    生成 SSH 公钥 如前所述,许多 Git 服务器都使用 SSH 公钥进行认证. 为了向 Git 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份. 这个过程在所有操作系统上 ...

  3. SQL Server 2008 收缩日志 清空删除大日志文件 转载

    SQL Server 2008 收缩日志 清空删除大日志文件 由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:(SQL2005)Ba ...

  4. vs2010中使用Nunit测试c#代码结果的正确性

    本文转载自:http://blog.csdn.net/pukuimin1226/article/details/8112151 http://www.nunit.org/index.php?p=dow ...

  5. Tcpdump使用常用9实例

    以下将给出9个使用tcpdump的例子,以说明tcpdump的具体使用方法. 1.针对特定网口抓包(-i选项) 当我们不加任何选项执行tcpdump时,tcpdump将抓取通过所有网口的包:使用-i选 ...

  6. 黄聪:如何关闭phpstorm的typo拼写检查

    文件-设置-编辑器-inspections-spelling-typo

  7. 在ios8中做的屏幕旋转功能

    http://www.cnblogs.com/smileEvday/archive/2013/04/24/Rotate2.html 思路出自这篇博主的文章. 直接上代码 -(void)willAnim ...

  8. Celery 和 Redis 入门

    Celery 是一个广泛应用于网络应用程序的任务处理系统. 它可以在以下情况下使用: 在请求响应周期中做网络调用.服务器应当立即响应任何网络请求.如果在请求响应周期内需要进行网络调用,则应在周期外完成 ...

  9. CRM JS 设置lookup字段 setSimpleLookupValue

    function setSimpleLookupValue(LookupId, Type, Id, Name) { /// <summary> /// Sets the value for ...

  10. 玩转单元测试之DBUnit

    DBunit 是一种扩展于JUnit的数据库驱动测试框架,它使数据库在测试过程之间处于一种已知状态,如果一个测试用例对数据库造成了破坏性影响,它可以帮助避免造成后面的测试失败或者给出错误结果. 虽然不 ...