当前位置:365bet亚洲官方投注 > 最新影视 > 毁灭的重生,Angular学习笔记

毁灭的重生,Angular学习笔记

文章作者:最新影视 上传时间:2019-10-09

《阿基拉》不愧本身Enclave级动画的身份,各类暴力成分完美。本片成分繁杂,立足点强大,是一部雄心勃勃的卡通。小编在里面看见了后头无数东瀛动漫喜欢每每聊起的奥妙而暧昧的宇宙观,深奥的根本与壮观的排场带给人一种心灵的感动。但是只怕是因为本身对人生对世界的眼光有限,看那部动画的时候总有一种雾里看花,水中望月之感。

在AngularJS应用中创设动画,有三种路子:

  • 使用CSS3动画
  • 使用JavaScript动画
  • 使用CSS3过渡

安装

$ bower install --save angular-animate
//引用库
<script src="js/vendor/angular.js"></script>
<script src="js/vendor/angular-animate.js"></script>
//引用模块
angular.module('myApp', ['ngAnimate']);

它是怎么着运营的

$animate劳动私下认可给动画成分的每种动画事件增多了四个CSS类。$animate服务支撑多少个放置的一声令下,它们无需额外的布署就可以帮衬动画。大家得感觉自个儿的下令创造动画。
享有那个先行存在的支撑动画的吩咐,都以透过监察和控制指令上的事件完成的。举例,当二个新的ngView步向並且把新内容带进浏览器时,这么些事件就称为ngViewenter事件。当ngHide计划呈现四个因素的时候,remove事件就能够接触。
上边是命令以致在差别境况触发的轩然大波列表。

365bet亚洲官方投注 1

$animate劳动基于指令发出的事件来增多特定的样式类。对于结构性的卡通片(譬喻步入、移动和距离),增加上去的CSS类是ng-[EVENT]ng-[EVENT]-active那般的样式。
对此基于样式类的卡通(举个例子ngClass),动画样式类的款型是[CLASS]-add[CLASS]-addactdive[CLASS]-remove[CLASS]-remove-active
最后,对于ngShowngHide,只有.ng-hide类会被抬高和移除,它的花样跟ngClass一样:.ng-hide-add.ng-hide-add-active.ng-hide-remove.ng-hide-remove-active

电动增添类

触发enter事件的指令会在DOM更改时接受三个.ng-enter样式类,然后,Angular添加ng-enter-active类,它会触发动画。ngAnimate自动物检疫查测验CSS代码来推断动画曾几何时做到。
以那一件事件变成时,Angular会从DOM成分上移除这七个类,使大家可以在DOM元素上定义动画相关的个性。
假设浏览器不协理CSS过渡或然动画片,动画会开首,然后立刻终止,DOM会处于最后的事态,不会加上过渡也许动画片的样式类。

使用CSS3过渡

要做别的CSS动画,大家都要承认给动画中关切的DOM成分增加了体制。
CSS3连着是截然依附样式类的,意思是说,只要大家在HTML上定义了动画的样式,这些动画就能在浏览器中动起来。要定义八个动画片,大家必要钦点想要增加动画的习性,以至特效的持续时间。

.fade-in {
    transition: 2s linear all;
    -webkit-transition: 2s linear all;
}

设置了那几个过渡和时间过后,就可以在DOM元素的两样情况上定义属性了。

.fade-in:hover {
    width: 300px;
    height: 300px;
}

使用ngAnimate,Angular通过给各种动画事件增多七个样式类的艺术开首了大家的一声令下动画:开始的ng-[EVENT]类,不久后头是ng-[EVENT]-active类。
为了活动让地点的DOM成分运用过渡完结Angular动画,大家修改上面开始的.fade-in身体力行来含有起头状态类:

.fade-in.ng-enter {
    opacity: 0;
}
.fade-in.ng-enter.ng-enter-active {
    opacity: 1;
}

也能够把transition质量放到基准CSS类中。

.fade-in {
    -webkit-transition: 2s linear all;
    transition: 2s linear all;
}
.fade-in.ng-enter { opacity: 0;}
.fade-in.ng-enter.ng-enter-active { opacity:1;}
.fade-in.ng-leave {opacity: 1;}
.fade-in.ng-leave.ng-leave-active { opacity: 0;}

使用CSS3 动画

使用CSS3卡通,大家会用一样的开首样式类ng-[EVENT], 可是无需在ng-[EVENT]-active状态中定义动画状态,因为CSS法规会管理剩余部分。
我们在@keyframes准则中开创动画。在@keyframes法规中定义的CSS元素内部,大家定义要管理的CSS样式。
想让DOM成分动起来时,我们使用animation:质量来绑定@keyframeCSS属性,它把动画增添到CSS成分上。
;当在CSS成分上绑定动画时,我们须求同期内定动画的称号和持续时间。如若咱们忘记增添动画的持续时间,它默许会设成0,此时卡通就不会运作了。
要创建@keyframes准则,大家要求给关键帧八个名字,并且安装动画的年月阶段,它包罗了动画片进度中的属性。

@keyframes firstAnimation {
    0% {color: yellow;}
    100% {color: black;}
}
/*对于Chrome和Safari浏览器 */
@-webkit-keyframes firstAnimation {
from {color: yellow;} //from等于0% 
to {color: black;}  //from等于100%
}

小编们并不局限于0%和百分之百:能够分步提供动画,比方一成、15%,等等。要把@keyframe质量赋值到想要应用动画的类上,大家使用animation至关重大字,它把动画应用到CSS选拔器选定的要素上。

.fade-in:hover {
    -webkit-animation: 2s firstAnimation;
    animation: 2s firstAnimation;
}

ngAnimate,我们把firstAnimation值绑定到猖獗用.fade-in类选定的成分上。Angular自动为大家抬高和移除.ng-enter类,所以我们得以简轻便单地把事件增多到.fade-in.ng-enter类上。

.fade-in.ng-enter {
    -webkit-animation: 2s firstAnimation;
    animation: 2s firstAnimation;
}

交错CSS过渡/动画

ngAnimate捆绑了一个附加的风味,用钦定的延迟来间隔相同的时间存在的动画。那意味着一旦拾一个项步向了一个ngRepeat列表,每一个项能够在上二个随后延迟X阿秒插入。那样爆发的特效便是三个犬牙交错特效,ngAnimate把CSS过渡和动画片处理成这样。

交错CSS过渡

沿用ng-enterng-enter-active这般组织CSS过渡代码的格式,可以增进一个附加的CSS类来提供交错延迟。使用上面包车型地铁CSS代码,可以用CSS过渡来给我们的.fade-in类增多多个犬牙相制特效。

.fade-in.ng-enter-stagger {
    -webkit-transition-delay:200ms;
    transition-delay:200ms;
    /* 防止意外CSS继承的保护措施 */
    -webkit-transition-duration:0;
    transition-duration:0;
}

上边包车型地铁代码会在各类后续项以动画格局进入之后,试行200阿秒的间歇。注意,另有一个CSS属性钦点了持续时间,况且设置成零了。为什么?它在此是一个安全防护,防止意外的CSS承继基础CSS类。假设未有这种维持,交错特效大概就能够被忽视了。
只是这对于大家的.fade-in类意味着什么样吗?想象一下我们正在使用一个ngRepeat要素,那几个成分运用的正是.fade-in类。

<div ng-repeat="item in items" class="fade-in">
    Item: #1 -- {{ item }}
</div>

历次一文山会海的项插入到列表中然后,交错延迟会日益运营。Item #1会被符合规律插入,#1会在200微秒之后,#3400阿秒之后,就那样推算。

交错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 { ... }

怎么样指令援救交错动画

全数指令都得以,但是仅当同一父容器下的五个或更加多一致动画事件同不经常候触发时,才足以动用。所以当十一个项被插入一个ngRepeat列表时,交互特效就生出。那代表借使ngClass被放在叁个ngRepeat元素上,ngClass的值在列表中对各样项都发生了更改,样式类变化的卡通就能渲染出一个长短不一特效。
驰骋动画也能够在自定义指令中触发。在一行中用$animate劳动调三次,三个并行动画就显现出来了。确认保证各样动画的父成分是同叁个,並且每一个参预动画元素的className值也是一致的。

使用JavaScript 动画

JS动画分歧于前二种Angular动画方法,因为大家一直运用JS设置DOM成分的习性。
怀有的主流浏览器都补助JS动画,所以一旦想在不帮衬CSS渐变和动画的浏览器上提供动画的话,那是个好的抉择。
这里,大家立异JS来管理动画,而不是操控CSS来让成分动起来。
ngAnimate在模块API上增加了.animation方法;那些法子提供了五个接口,大家得以用来创制动画。
animiation()措施饱含五个参数。

  • classname(字符串)
    这个classname会协作要爆发动画的因素的class
  • animateFun(函数)
    animate函数预期会回来二个指标,富含了指令会触发的两样事件函数(当使用的时候)。
angular.module('myApp',['ngAnimate']).animation('.fade-in',function() {
    return {
        enter: function(element, done) {
            // 运行动画
            // 当动画结束的时候调用done
                return function(cancelled) {
                    // 关闭或者取消的回调
                }
            }
        }
    });

$animate劳务为钦赐的成分调用这一个函数。在这个函数里,大家得以对这一个因素做其他业务。独一须要是在动画甘休时,须求调用回调函数done()
在这么些函数中,我们可以重临一个end函数,它会在动画甘休或然动画片被撤除时调用。
当动画触发时,$animate为事件查找相配的卡通函数。如若找到了特别事件的函数,它会推行那个函数,不然就能全盘跳过那些动画。

微调动画

暗中认可景况下,ngAnimate会自动尝试让各类通过$animate服务传递过来的要素都动起来。但是不要挂念,唯有富含了用CSS恐怕JS动画注册了的CSS类的因素才会真的动起来。
纵然这么些系统在运营时,必需检查各类恐怕的CSS类,那说不定会在低速设备上慢一些。ngAnimate提供了一个安插项,让$animate提供者能够行使正则表达式对成分举行过滤,以去掉不匹配成分上的动画操作。

myModule.config(function($animateProvider) {
    // 唯一合法的参数是正则表达式
    $animateProvider.classNameFilter(/banimate-/);
});

今天有了给定的正则表明式,/animated/,只有以animate始于的CSS类会被为动画而管理。结果,大家的.fade-in动画不会再运维了,它必要被重命名成.animate-fade-in能力确实运营。

DOM回调事件

当动画在一个成分产生时,咱们想要检查测量试验DOM操作什么时候发出,能够在$animate365bet亚洲官方投注,劳动上登记三个事件。

element.on('$animate:before', function(evt, animationDetails) {});
element.on('$animate:after', function(evt, animationDetails) {});

内置指令的动画

ngRepeat动画

ngRepeat指令发出那个事件:

365bet亚洲官方投注 2

<div ng-controller="HomeController">
    <ul>
        <li class="fade-in" ng-repeat="r in roommates">
            {{ r }}
        </li>
    </ul>
</div>

我们的HomeController默许是如此定义的:

angular.module('myApp',['ngAnimate']).controller('HomeController',         
    function($scope) {
        $scope.roommates = ['Ari', 'Q', 'Sean', 'Anand'];
        setTimeout(function() {
            $scope.roommates.push('Ginger');
            $scope.$apply(); // 触发一次digest
            setTimeout(function() {
                $scope.roommates.shift();
                $scope.$apply(); // 触发digest
            }, 2000);
        }, 1000);
    });

在这么些事例中,大家有一个roommates列表,包含了七个因素。在一分钟之后,加了第两个。两秒之后,移除了第五个要素。

1.CSS3过渡

要让ngRepeat列表中的成分动起来,大家必要认可增多了显示有分初步状态的CSS样式类,以致为enteredit场地定义最后状态的类。
先是,在初步类上定义动画属性:

.fade-in.ng-enter,.fade-in.ng-leave {
    transition: 2s linear all;
    -webkit-transition: 2s linear all;
}

由来,能够省略地在动画中定义起始和末段阶段的CSS属性。这里,大家把成分从蛋青的文字淡入,在步入动画的末段阶段把文字产生青色。在离开(成分移除)动画中,我们把品质反转:

.fade-in.ng-enter {
    opacity: 0;
    color: green;
}
.fade-in.ng-enter.ng-enter-active {
    opacity: 1;
    color: black;
}
.fade-in.ng-leave {}
.fade-in.ng-leave.ng-leave-active {opacity: 0;}
2.CSS3第一帧动画

动用主要帧动画时,无需定义伊始和竣事的样式类,而是仅定义单个选择器,包蕴动画样式的键。
第一为重要帧定义动画属性:

@keyframes animateView-enter {
    from {opacity:0;}
    to {opacity:1;}
}
@-webkit-keyframes animateView-enter {
    from {opacity:0;}
    to {opacity:1;}
}
@keyframes animateView-leave {
    from {opacity: 1;}
    to {opacity: 0;}
}
@-webkit-keyframes animateView-leave {
    from {opacity: 1;}
    to {opacity: 0;}
}

设置了关键帧之后,大家得以简轻巧单地把动画附加到ngAnimate丰裕的CSS样式类上:

.fade-in.ng-enter {
    -webkit-animation: 2s fade-in-enter-animation;
    animation: 2s fade-in-enter-animation;
}
.fade-in.ng-leave {
    -webkit-animation: 2s fade-in-leave-animation;
    animation: 2s fade-in-leave-animation;
}
3.JavaScript动画

当用JS做动画时,须要在动画的描述对象上定义enterleave属性。

angular.module('myApp',['ngAnimate']).animation('.fade-in', function() {
    return {
        enter: function(element, done) {
            // 不使用jQuery的原始动画
            // 用jQuery会简单很多
            var op = 0, timeout,
            animateFn = function() {
                op += 10;
                element.css('opacity', op/100);
                if (op >= 100) {
                    clearInterval(timeout);
                    done();
                }
            };
            // 把初始透明度设为0
            element.css('opacity', 0);
            timeout = setInterval(animateFn, 100);
        },
        leave: function(element, done) {
            var op = 100,timeout,
            animateFn = function() {
                op-=10;
                element.css('opacity', op/100);
                if (op <= 0) {
                    clearInterval(timeout);
                    done();
                }
            };
            element.css('opacity', 100);
            timeout = setInterval(animateFn, 100);
        }
    }
});

ngView动画

ngView一声令下触发这几个事件:

365bet亚洲官方投注 3

<a href="#/">Home</a>
<a href="#/two">Second view</a>
<a href="#/three">Third view</a>
<div class="animateView" ng-view></div>

当跟ng-view一声令下合作时,大家是在跟Angular内部的路由打交道。能够把路由设置为:

angular.module('myApp',['ngAnimate', 'ngRoute']).config(function($routeProvider) {
    $routeProvider.when('/', {
        template: '<h2>One</h2>'
    }).when('/two', {
        template: '<h2>Two</h2>'
    }).when('/three', {
        template: '<h2>Three</h2>'
    });
})

示范中的八个路由,各样呈现了贰个两样的视图。

1.CSS3过渡

要让ngView列表中的成分动起来,大家须要承认增加了表现有分最初状态的CSS样式类,以致为enteredit气象定义最后状态的类:

.animateView.ng-enter,.animateView.ng-leave {
    transition: 2s linear all;
    -webkit-transition: 2s linear all;
}

迄今结束,能够轻巧地在动画中定义开始和尾声阶段的CSS属性。这里,大家把成分从芥末黄的文字淡入,在进入动画的尾声阶段把文字形成水枣红。在相距(成分移除)动画中,大家把品质反转:

.animateView.ng-enter {
    opacity: 0;
    color: green;
}
.animateView.ng-enter.ng-enter-active {
    opacity: 1;
    color: black;
}
.animateView.ng-leave {}
.animateView.ng-leave.ng-leave-active {opacity: 0;}
2.CSS3重大帧动画

率先,增加大家为卡通定义的@keyframe

@keyframes animateView-enter {
    from {opacity:0;}
    to {opacity:1;}
}
@-webkit-keyframes animateView-enter {
    from {opacity:0;}
    to {opacity:1;}
}
@keyframes animateView-leave {
    from {opacity: 1;}
    to {opacity: 0;}
}
@-webkit-keyframes animateView-leave {
    from {opacity: 1;}
    to {opacity: 0;}
}

为了利用动画,供给做的正是在我们的类中增多动画CSS样式:

.animateView.ng-enter {
    -webkit-animation: 2s animateView-enter;
    animation: 2s animateView-enter;
}
.animateView.ng-leave {
    -webkit-animation: 2s animateView-leave;
    animation: 2s animateView-leave;
}
3.JavaScript动画

首先,大家需求下载况兼在文书档案的底部满含jQuery。
当用JS做动画时,需求在动画的汇报对象上定义enterleave属性。

angular.module('myApp',['ngAnimate']).animation('.animateView', function() {
    return {
        enter: function(element, done) {
            // 显示如何用jQuery实现动画的例子
            // 注意,这需要在HTML中包含jQuery
            $(element).css({opacity: 0});
            $(element).animate({opacity: 1}, done);
        },
        leave: function(element, done) {done();}
    }
});

ngInclude动画

ngInclude指令触发这几个事件:

365bet亚洲官方投注 4

<div ng-init="template.url='/home.html'" ng-controller="HomeController">
    <button ng-click="template.url='/home.html'">Home</button>
    <button ng-click="template.url='/second.html'">Second</button>
    <button ng-click="template.url='/third.html'">Third</button>
    <div class="animateInclude" ng-include="template.url"></div>
</div>

我们在页面中含有内联模板,也能够把那些视图设置为从远程服务器获取。

<script type="text/ng-template" id="/home.html">Home Template</script>
<script type="text/ng-template" id="/second.html">Second Template</script>
<script type="text/ng-template" id="/third.html">Third Template</script>
1.CSS3过渡

要让ngInclude列表中的成分动起来,大家需求料定增多了表现有分开始状态的CSS样式类,以至为enteredit事态定义最后状态的类:

.animateInclude.ng-enter,.animateInclude.ng-leave {
    transition: 2s linear all;
    -webkit-transition: 2s linear all;
}

迄今,能够简轻便单地在动画中定义开头和终极阶段的CSS属性。这里,我们把元素从深青莲的文字淡入,在踏向动画的末梢阶段把文字形成石磨蓝。在相距(成分移除)动画中,大家把质量反转:

.animateInclude.ng-enter {
    opacity: 0;
    color: green;
}
.animateInclude.ng-enter.ng-enter-active {
    opacity: 1;
    color: black;
}
.animateInclude.ng-leave {}
.animateInclude.ng-leave.ng-leave-active {opacity: 0;}
2.CSS3动画

第一,增添为卡通定义的@keyframe

@keyframes animateInclude-enter {
    from {opacity:0;}
    to {opacity:1; color: green}
}
@-webkit-keyframes animateInclude-enter {
    from {opacity:0;}
    to {opacity:1; color: green}
}
@keyframes animateInclude-leave {
    from {opacity: 1;}
    to {opacity: 0; color: black}
}
@-webkit-keyframes animateInclude-leave {
    from {opacity: 1;}
    to {opacity: 0; color: black}
}

为了接纳动画,供给做的就是在大家的类中加多动画CSS样式:

.animateInclude.ng-enter {
    -webkit-animation: 2s animateInclude-enter;
    animation: 2s animateInclude-enter;
}
.animateInclude.ng-leave {
    -webkit-animation: 2s animateInclude-leave;
    animation: 2s animateInclude-leave;
}
3.JavaScript动画

当用JS做动画时,须求在动画的叙说对象上定义enterleave属性。

angular.module('myApp', ['ngAnimate']).animation('.animateInclude', function() {
    return {
        enter: function(element, done) {
            // 显示如何用jQuery实现动画的例子
            // 注意,这需要在HTML中包含jQuery
            $(element).css({opacity: 0});
            $(element).animate({opacity: 1}, done);
        },
        leave: function(element, done) {done();}
    }
});

ngSwitch动画

ngSwitch一声令下触发那几个事件:

365bet亚洲官方投注 5

ngSwitch指令类似于前方的例证。对于那几个事例,大家用上边选择了ng-switch指令的HTML来运行:

<div ng-init="template='home'"ng-controller="HomeController">
    <button ng-click="template='home'">Home</button>
    <button ng-click="template='second'">Second</button>
    <button ng-click="template='third'">Third</button>
    <div ng-switch="template">
        <div class="animateSwitch" ng-switch-when="home">
            <h1>Home</h1>
        </div>
        <div class="animateSwitch" ng-switch-when="second">
            <h1>Second</h1>
        </div>
        <div class="animateSwitch" ng-switch-when="third">
            <h1>Home</h1>
        </div>
    </div>
</div>
1.CSS3过渡

要让ngSwitch列表中的成分动起来,我们需求料定加多了展现存分最早状态的CSS样式类,乃至为enteredit场馆定义最后状态的类:

.animateSwitch.ng-enter,.animateSwitch.ng-leave {
    transition: 2s linear all;
    -webkit-transition: 2s linear all;
}

迄今截至,能够省略地在动画中定义开头和末段阶段的CSS属性。这里,大家把成分从中绿的文字淡入,在步入动画的末梢阶段把文字形成深紫。在离开(成分移除)动画中,大家把质量反转:

.animateSwitch.ng-enter {
    opacity: 0;
    color: green;
}
.animateSwitch.ng-enter.ng-enter-active {
    opacity: 1;
    color: black;
}
.animateSwitch.ng-leave {}
.animateSwitch.ng-leave.ng-leave-active {opacity: 0;}
2.CSS3动画

第一,增添为动画片定义的@keyframe

@keyframes animateSwitch-enter {
    from {opacity:0;}
    to {opacity:1; color: green}
}
@-webkit-keyframes animateSwitch-enter {
    from {opacity:0;}
    to {opacity:1; color: green}
}
@keyframes animateSwitch-leave {
    from {opacity: 1;}
    to {opacity: 0; color: black}
}
@-webkit-keyframes animateSwitch-leave {
    from {opacity: 1;}
    to {opacity: 0; color: black}
}

为了选用动画,须要做的就是在大家的类中加多动画CSS样式:

.animateSwitch.ng-enter {
    -webkit-animation: 2s animateSwitch-enter;
    animation: 2s animateSwitch-enter;
}
.animateSwitch.ng-leave {
    -webkit-animation: 2s animateSwitch-leave;
    animation: 2s animateSwitch-leave;
}
3.JavaScript动画

当用JS做动画时,要求在动画的叙说对象上定义enterleave属性。

angular.module('myApp',['ngAnimate']).animation('.animateSwitch',function() {
    return {
        enter: function(element, done) {
            // 显示如何用jQuery实现动画的例子
            // 注意,这需要在HTML中包含jQuery
            $(element).css({opacity: 0});
            $(element).animate({opacity: 1}, done);
        },
        leave: function(element, done) {done();}
    }
});

ngIf动画

ngIf命令触发那一个事件:

365bet亚洲官方投注 6

<div ng-init="show=false" ng-controller="HomeController">
    <button ng-click="show=!show">Show</button>
    <div ng-if="show" class="animateNgIf">
        <h2>Show me</h2>
    </div>
</div>
1.CSS3过渡

要让ngIf中的成分动起来,大家供给肯定加多了表现存分初阶状态的CSS样式类,以至为
enter和edit状态定义最后状态的类:

.animateNgIf.ng-enter,.animateNgIf.ng-leave {
    transition: 2s linear all;
    -webkit-transition: 2s linear all;
}

从那之后,能够简轻易单地在动画中定义早先和终极阶段的CSS属性。这里,大家把成分从黄铜色的文字淡入,在进入动画的终极阶段把文字造成石青。在距离(成分移除)动画中,我们把质量反转:

.animateNgIf.ng-enter {
    opacity: 0;
    color: green;
}
.animateNgIf.ng-enter.ng-enter-active {
    opacity: 1;
    color: black;
}
.animateNgIf.ng-leave {}
.animateNgIf.ng-leave.ng-leave-active {opacity: 0;}
2.CSS3动画

第一,增多为动画定义的@keyframe

@keyframes animateNgIf-enter {
    from {opacity:0;}
    to {opacity:1;}
}
@-webkit-keyframes animateNgIf-enter {
    from {opacity:0;}
    to {opacity:1;}
}
@keyframes animateNgIf-leave {
    from {opacity: 1;}
    to {opacity: 0;}
}
@-webkit-keyframes animateNgIf-leave {
    from {opacity: 1;}
    to {opacity: 0;}
}

为了利用动画,必要做的就是在我们的类中增加动画CSS样式:

.animateNgIf.ng-enter {
    -webkit-animation: 2s animateNgIf-enter;
    animation: 2s animateNgIf-enter;
}
.animateNgIf.ng-leave {
    -webkit-animation: 2s animateNgIf-leave;
    animation: 2s animateNgIf-leave;
}
3.JavaScript动画

当用JS做动画时,要求在动画的描述对象上定义enterleave属性。

angular.module('myApp',['ngAnimate']).animation('.animateNgIf', function() {
    return {
        enter: function(element, done) {
            // 显示如何用jQuery实现动画的例子
            // 注意,这需要在HTML中包含jQuery
            $(element).css({opacity: 0});
            $(element).animate({opacity: 1}, done);
        },
        leave: function(element, done) {done();}
    }
});

ngClass动画

当视图中的样式类发生变化时,是能够依据行为去发生动画的。当二个CSS类更换时(例如在ngShowngHide指令中),$animate会打招呼和接触动画,不管是增添了新类,依旧移除了旧类。
分化于使用进入动画的命名约定,我们为ngClass应用三个新的CSS约定,依次为新类加后缀,变为[CLASSNAME]-add[CLASSNAME]-remove
临近于地点的踏入事件,ngAnimate会在契合的光阴为具体的事件增添[CLASSNAME]-addactive[CLASSNAME]-remove-active
当大家在这几个样式类上做动画时,动画先触发,然后最后的类在动画甘休时才被加上。当贰个类被移除时,它直到动画甘休在此之前都还在要素上。
ngClass指令触发这个事件:

365bet亚洲官方投注 7

<div ng-init="grow=false" ng-controller="HomeController">
    <button ng-click="grow=!grow">Grow</button>
    <div ng-class="{grown:grow}" class="animateMe">
        <h2>Grow me</h2>
    </div>
</div>
1.CSS3过渡

要让ngClass中的成分动起来,大家须要认可加多了表现有分起先状态的CSS样式类,以致为enteredit事态定义最后状态的类:

.animateMe.grown-add,.animateMe.grown-remove {
    transition: 2s linear all;
    -webkit-transition: 2s linear all;
}

迄今截止,能够简轻松单地在动画中定义初叶和末段阶段的CSS属性。

.grown {font-size: 50px;}
.animateMe.grown-add {font-size: 16px;}
.animateMe.grown-add.grown-add-active {font-size: 50px;}
.animateMe.grown-remove {}
.animateMe.grown-remove.grown-remove-active {font-size:16px;}
2.CSS3动画

第一,增添为动画定义的@keyframe

@keyframes animateMe-add {
    from {font-size: 16px;}
    to {font-size: 50px;}
}
@-webkit-keyframes animateMe-add {
    from {font-size: 16px;}
    to {font-size: 50px;}
}
@keyframes animateMe-remove {
    to {font-size: 50px;}
    from {font-size: 16px;}
}
@-webkit-keyframes animateMe-remove {
    to {font-size: 50px;}
    from {font-size: 16px;}
}

为了采纳动画,要求做的正是在我们的类中增加动画CSS样式:

.animateMe.grown-add {
    -webkit-animation: 2s animateMe-add;
    animation: 2s animateMe-add;
}
.animateMe.grown-remove {
    -webkit-animation: 2s animateMe-remove;
    animation: 2s animateMe-remove;
}
3.JavaScript动画

当用JS做动画时,必要在动画的叙说对象上定义addClassremoveClass属性。

angular.module('myApp',['ngAnimate']).animation('.animateMe', function() {
    return {
        addClass: function(ele, clsName, done){
            // 显示如何用jQuery实现动画的例子
            // 注意, 这需要在HTML中包含jQuery
            if (clsName === 'grown') {
                $(ele).animate({'font-size': '50px'}, 2000, done);
            } else { done(); }
        },
        removeClass: function(ele, clsName, done){
            if (clsName === 'grown') {
                $(ele).animate({'font-size': '16'}, 2000, done);
            } else { done(); }
        }
    }
});

ngShow/ngHide动画

ngShowngHide命令在展现或然隐蔽成分时,使用了.ng-hide类。能够在呈现和隐敝DOM成分之间的这段时光增进动画。
当在那个样式类上做动画时,动画会先触发,它完毕时,最终的.ng-hide才会被加到DOM成分上。
因为当移除ng-hide类时,ng-hide命令还在DOM成分上,所以在它完结此前,我们是看不到动画的。因而,必要告诉CSS把大家的样式类突显出来,不要折叠。
ngShowngHide命令触发这几个事件:

365bet亚洲官方投注 8

<div ng-init="show=false" ng-controller="HomeController">
    <button ng-click="show=!show">Show</button>
    <div ng-show="show" class="animateMe">
        <h2>Show me</h2>
    </div>
</div>
1.CSS3过渡

要让ngHide中的成分动起来,大家供给认同增加了表现存分初阶状态的CSS样式类,以至为enteredit事态定义最后状态的类:

.animateMe.ng-hide-add,.animateMe.ng-hide-remove {
    transition: 2s linear all;
    -webkit-transition: 2s linear all;
    display: block !important;
}

潜心CSS块中的最后一行:它报告CSS渲染那几个类,况且,对于display品质来说,未有别的备选值。未有那行的话,那几个因素就不会显得了。至此,能够轻巧地在动画中定义伊始和后期的CSS属性。

.animateMe.ng-hide-add {opacity: 1;}
.animateMe.ng-hide-add.ng-hide-add-active{opacity: 0;}
.animateMe.ng-hide-remove {opacity: 0;}
.animateMe.ng-hide-remove.ng-hide-remove-active {opacity: 1;}
2.CSS3动画

率先,增添为动画定义的@keyframe

@keyframes animateMe-add {
    from {opacity: 1;}
    to {opacity: 0;}
}
@-webkit-keyframes animateMe-add {
    from {opacity: 1;}
    to {opacity: 0;}
}
@keyframes animateMe-remove {
    from {opacity:0;}
    to {opacity:1;}
}
@-webkit-keyframes animateMe-remove {
    from {opacity:0;}
  to {opacity:1;}
}

为了利用动画,要求做的正是在我们的类中增多动画CSS样式:

.animateMe.ng-hide-add {
    -webkit-animation: 2s animateMe-add;
    animation: 2s animateMe-add;
}
.animateMe.ng-hide-remove {
    -webkit-animation: 2s animateMe-remove;
    animation: 2s animateMe-remove;
    display: block !important;
}
3.JavaScript动画

当用JS做动画时,须求在动画的陈诉对象上定义addClassremoveClass属性。

angular.module('myApp',['ngAnimate']).animation('.animateMe', function() {
    return {
        addClass: function(ele, clsName, done){
            // 显示如何用jQuery实现动画的例子
            // 注意,这需要在HTML中包含jQuery
            if (clsName === 'ng-hide') {
                $(ele).animate({'opacity': 0}, 2000, done);
            } else { done(); }
        },
        removeClass: function(ele, clsName, done){
            if (clsName === 'ng-hide') {
                $(ele).css('opacity', 0);
                // 强制移除ng-hide类这样我们就可以真的把动画显示出来
                $(ele).removeClass('ng-hide');
                $(ele).animate({'opacity': 1}, 2000, done);
            } else { done(); }
        }
    }
});

始建自定义动画

$animate劳务给我们在指令中落到实处自定义动画提供了帮忙。把$animate劳动注入到大家同心合力的应用中事后,能够用暴表露的风云为种种事件触发$animate指标上的关联函数。
要在大家温馨的一声令下中早先动画,需求注入$animate服务。

angular.module('myApp',['ngAnimate']).directive('myDirective',     
    function($animate) {
        return {
            template: '<div class="myDirective"></div>',
            link: function(scope, ele, attrs) {
            // 在这里添加动画  例如:
                $animate['addClass'](element, 'ng-hide');
            }
        }
    });

至此,就足以把事件绑定到指令上,伊始显示大家的动画片了。
树立了命令之后,大家得以调用$animate函数创立一个卡通,与我们的指令通讯。

angular.module('myApp',['ngAnimate']).animation('.scrollerAnimation',function() {
    return {
        animateFun: function(element, done) {
            // 我们可以在这个函数中做任意想做的事
            // 但是需要调用done来让angular知道动画结束了
        }
    }
});

$animate服务暴露了一些情势,为停放指令的卡通事件提供协理。这个$animate劳务暴揭露来的平地风波是:enterleavemoveaddClassremoveClass
$animate劳务把那一个事件以函数的方法提供,让大家能在融洽的吩咐中拍卖自定义动画。

addClass()

addClass()措施触发了贰个基于className变量的自定义动画事件,并且把className值作为CSS类增加到成分上。当在DOM成分上增添样式类时,$animate劳务给这么些className增多了一个叫-add的后缀来让大家建构动画。
假如未有CSS过渡,在CSS选用器([className]-add)上也尚未定义关键帧动画,ngAnimate就不会接触那么些动画,只是会把那几个样式类增进。
addClass()办法带四个参数。

  • element(jQuery/jqLite成分):正在建设构造动画的要素。
  • className(字符串):正在成立动画,何况拉长到成分上的CSS类。
  • done(函数):当动画产生时调用的回调函数。
angular.module('myApp',['ngAnimate']).directive('myDirective', function($animate) {
    return {
        template: '<div class="myDirective"></div>',
        link: function(scope, ele, attrs) {
            ele.bind('click', function() {
                $animate.addClass(ele, 'greenlight');
            });
        }
    }
});

调用addClass()方法会经过如下步骤:
(1) 运营具备在要素上用JS定义的动画片;
(2) [className]-add类被增添到元素上;
(3) $animate自己争辩CSS样式来搜寻过渡/动画的持续时间和延迟属性;
(4) [className]-add-active类被加多到成分的classList中(触发CSS动画);
(5) $animate用定义过的持续时间等待实现;
(6) 动画甘休,$animate移除五个拉长的类:[className]-add[className]-add-active
(7) className类被增多到元素上;
(8) 触发done()回调函数(即使定义了的话)。

removeClass()

removeClass()方法触发了二个依照className的自定义动画事件,何况移除在className值中定义的CSS类。当从DOM成分上移除贰个类的时候,$animate服务给这一个className增多了贰个叫-remove的后缀来让我们树立动画。
一旦没有CSS过渡,在CSS采纳器([className]-remove)上也从没定义关键帧动画,ngAnimate就不会触发这一个动画,只是会把这一个样式类增进。
removeClass()艺术带几个参数。

  • element(jQuery/jqLite成分):正在创设动画的要素。
  • className(字符串):正在创制动画,何况从要素上移除的CSS类。
  • done(函数):当动画产生时调用的回调函数。
angular.module('myApp',['ngAnimate']).directive('myDirective', function($animate) {
    return {
        template: '<div class="myDirective"></div>',
        link: function(scope, ele, attrs) {
            ele.bind('click', function() {
                $animate.addClass(ele, 'greenlight');
            });
        }
    }
});

调用·removeClass()·动画方法会经历如下步骤:
(1) 运营具备在要素上用JS定义的卡通;
(2) [className]-remove类被增多到成分上;
(3) $animate自己商量CSS样式来查找过渡/动画的持续时间和延期属性;
(4) [className]-remove-active类被加多到元素的classList中(触发CSS动画);
(5) $animate用定义过的持续时间等待完结;
(6) 动画甘休,$animate移除八个增进的类:[className][className]-remove[className]-remove-active
(7) 触发done()回调函数(要是定义了的话)。

enter()

enter()方法把成分增加到它在DOM中的父成分,然后运维enter动画片。动画开头之后,$animation劳务会增加ng-enterng-enter-active类,给指令贰个火候来确立动画。
enter()艺术最多能够带多个参数。

  • element(jQuery/jqLite成分):正在创制动画的要素。
  • parent(jQuery/jqLite成分):这一个因素的父成分,它是我们enter动画的节骨眼。
  • after(jQuery/jqLite成分):这么些成分的弟兄成分,它将会化为enter动画的难题。
  • done(函数):当动画变成时调用的回调函数。
angular.module('myApp',['ngAnimate']).directive('myDirective',function($animate) {
    return {
        template: '<div class="myDirective"><h2>Hi</h2></div>',
        link: function(scope, ele, attrs) {
            ele.bind('click', function() {
                $animate.enter(ele, ele.parent());
            });
        }
    }
});

调用enter()卡通方法会经历如下步骤:
(1) 本成分被插入父成分中,只怕是after要素后边;
(2) $animate运作具备在要素上用JS定义的卡通片;
(3) ·.ng-enter·类被增添到成分的classList中;
(4) $animate反省CSS样式来查找过渡/动画的持续时间和推迟属性。
(5) .ng-enter-active类被加多到成分的classList中(触发动画);
(6) $animate用定义过的持续时间等待达成;
(7) 动画甘休,$animate从要素移除.ng-enter.ng-enter-active类;
(8) 触发done()回调函数(倘诺定义了的话)。

leave()

leave()艺术运营leave动画片。当它截止运转时,会把成分从DOM移除。动画开首过后,它会在要素上加多.ng-leave.ng-leave-active类。
leave()艺术带四个参数。

  • element(jQuery/jqLite成分):正在创制动画的要素。
  • done(函数):当动画完了时调用的回调函数。
angular.module('myApp',['ngAnimate']).directive('myDirective',function($animate) {
    return {
        template: '<div class="myDirective"><h2>Hi</h2></div>',
        link: function(scope, ele, attrs) {
            ele.bind('click', function() {
                $animate.leave(ele);
            });
        }
    }
});

调用leave()动画片方法会经历如下步骤:
(1) $animate可运行具备在要素上用JS定义的动画片;
(2) .ng-leave类被加多到成分的classList中;
(3) $animate自笔者探讨CSS样式来搜索过渡/动画的持续时间和延迟属性;
(4) .ng-leave-active类被增加到成分的classList中(触发动画);
(5) $animate用定义过的持续时间等待完毕;
(6) 动画甘休,$animate从要素移除.ng-leave.ng-leave-active类;
(7) 成分被从DOM移除;
(8) 触发done()回调函数(假若定义了的话)。

move()

move()函数触发move DOM动画。在动画先河以前,$animate劳务依旧把成分插入父容器中,恐怕直接加到after要素之后,若是有个别话。动画开端后,为了动画的无休止,.ng-move.ng-move-active就能够被增加。
move()办法包罗八个参数。

  • element(jQuery/jqLite成分):正在建设构造动画的要素。
  • parent(jQuery/jqLite元素):这些成分的父成分,它是大家enter动画片的热销。
  • after(jQuery/jqLite成分):那个因素的兄弟成分,它将会成为enter动画的要点。
  • done(函数):当动画形成时调用的回调函数。
angular.module('myApp',['ngAnimate']).directive('myDirective',function($animate) {
    return {
        template: '<div class="myDirective"><h2>Hi</h2></div>',
        link: function(scope, ele, attrs) {
            ele.bind('click', function() {
                $animate.move(ele, ele.parent());
            });
        }
    }
});

调用move()卡通方法会经历如下步骤:
(1) 成分被移到父成分中,也许在after要素之后;
(2) $animate可运维具备在要素上用JS定义的卡通片;
(3) .ng-move类被增多到成分的classList中;
(4) $animate反省CSS样式来探究过渡/动画的持续时间和推迟属性;
(5) .ng-move-active类被增添到成分的classList中(触发动画);
(6) $animate用定义过的持续时间等待实现;
(7) 动画甘休,$animate从要素移除.ng-move.ng-move-active类;
(8) 触发done()回调函数(假诺定义了的话)。

与第三方库集成

Animate.css

要选用那个Animate.css,从https://github.com/yearofmoo/ngAnimate-animate.css上下载animate.cssanimate.js。只需在HTML中引用它们就可以。

<!-- HTML的头部 -->
<link rel="stylesheet" type="text/css" href="css/animate.css">
<!-- HTML的主体 -->
<script type="text/javascript" src="js/vendor/animate.js"></script>

无需把ngAnimate作为我们运用的依附项,只要把ngAnimate-animate.css作为信赖项包罗进来就足以了。这种代表格局能运营,是因为ngAnimate-animate.css模块暗许就呼吁了ngAnimate模块。
这么些转变做完之后,大家就足以简轻松单地经过ng-class命令来援用动画类了。

<div class="animateMe" ng-class="{'dn-fade':dn_fade}"></div>

本文由365bet亚洲官方投注发布于最新影视,转载请注明出处:毁灭的重生,Angular学习笔记

关键词: