Page 322 - AngularJS权威教程
P. 322

302  第 22 章  Angular 动画


                     Item: #1 -- {{ item }}
                 </div>
                 每次一系列的项插入到列表中之后,交错延迟会逐步启动。Item #1会被正常插入,#1会在200
             毫秒之后,#3 400毫秒之后,以此类推。


             22.5.2 交错CSS动画

                 CSS动画也支持并且遵循与上面提到的CSS过渡交错特效同样的CSS命名约定。唯一的不同
             是没有使用transition-delay,而是用了animation-delay(原因很明显)。如果用CSS动画来
             实现交错特效,.fade-in类看上去就会像这样:

                 .fade-in.ng-enter-stagger {
                     -webkit-animation-delay:200ms;
                     animation-delay:200ms;

                     /* css交错动画需要放在这里 */
                     -webkit-animation-duration:0;
                     animation-duration:0;
                 }
                 既然CSS关键帧要等到重排(当浏览器重绘屏幕)时才会发生,可能会出现轻微的闪烁,或者
             元素自身可能短暂地不动,直到交错动画开始生效。这是因为关键帧动画尚未触发,所以from或者
             0%的动画还没有开始。为解决这个问题,在赋值了关键帧动画的CSS类中,可以放额外的CSS样式。

                 .fade-in.ng-enter {
                     /* 重排之前的样式 */
                     opacity:0;

                     -webkit-animation: 2s firstAnimation;
                     animation: 2s firstAnimation;
                 }

                 .fade-in.ng-enter-stagger { ... }

                 @keyframes firstAnimation { ... }
                 @-webkit-keyframes firstAnimation { ... }

             22.5.3  什么指令支持交错动画

                 很简单,所有指令都可以,但是仅当同一父容器下的两个或更多相同动画事件同时触发时,
             才可以使用。所以当10个项被插入一个nRepeat列表时,交互特效就产生。这意味着如果ngClass
             被放在一个ngRepeat元素上,ngClass的值在列表中对每个项都产生了变化,样式类变化的动画
             就会渲染出一个交错特效。
                 交错动画也可以在自定义指令中触发。在一行中用$animate服务调几次,一个交互动画就呈
             现出来了。确保每个动画的父元素是同一个,并且每个参与动画元素的className值也是相同的。


             22.6 使用 JavaScript 动画

                 JavaScrip动画不同于前两种Angular动画方法,因为我们直接使用JavaScript设置DOM元素的
             属性。
   317   318   319   320   321   322   323   324   325   326   327