/
githubmirror
/
angular.js
Обзор
Документация
Войти
/
githubmirror
/
angular.js
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/ngAnimate/ngAnimateSwap.js
117 строк
4 KB
George Kalpakas
fix(ngAnimateSwap): make it compatible with `ngIf` on the same element
15 окт 2018, 23:18
15 окт 2018, 23:18
3e38032
Код
Авторство
О чём код?
'use strict'; /** * @ngdoc directive * @name ngAnimateSwap * @restrict A * @scope * * @description * * ngAnimateSwap is a animation-oriented directive that allows for the container to * be removed and entered in whenever the associated expression changes. A * common usecase for this directive is a rotating banner or slider component which * contains one image being present at a time. When the active image changes * then the old image will perform a `leave` animation and the new element * will be inserted via an `enter` animation. * * @animations * | Animation | Occurs | * |----------------------------------|--------------------------------------| * | {@link ng.$animate#enter enter} | when the new element is inserted to the DOM | * | {@link ng.$animate#leave leave} | when the old element is removed from the DOM | * * @example * <example name="ngAnimateSwap-directive" module="ngAnimateSwapExample" * deps="angular-animate.js" * animations="true" fixBase="true"> * <file name="index.html"> * <div class="container" ng-controller="AppCtrl"> * <div ng-animate-swap="number" class="cell swap-animation" ng-class="colorClass(number)"> * {{ number }} * </div> * </div> * </file> * <file name="script.js"> * angular.module('ngAnimateSwapExample', ['ngAnimate']) * .controller('AppCtrl', ['$scope', '$interval', function($scope, $interval) { * $scope.number = 0; * $interval(function() { * $scope.number++; * }, 1000); * * var colors = ['red','blue','green','yellow','orange']; * $scope.colorClass = function(number) { * return colors[number % colors.length]; * }; * }]); * </file> * <file name="animations.css"> * .container { * height:250px; * width:250px; * position:relative; * overflow:hidden; * border:2px solid black; * } * .container .cell { * font-size:150px; * text-align:center; * line-height:250px; * position:absolute; * top:0; * left:0; * right:0; * border-bottom:2px solid black; * } * .swap-animation.ng-enter, .swap-animation.ng-leave { * transition:0.5s linear all; * } * .swap-animation.ng-enter { * top:-250px; * } * .swap-animation.ng-enter-active { * top:0px; * } * .swap-animation.ng-leave { * top:0px; * } * .swap-animation.ng-leave-active { * top:250px; * } * .red { background:red; } * .green { background:green; } * .blue { background:blue; } * .yellow { background:yellow; } * .orange { background:orange; } * </file> * </example> */ var ngAnimateSwapDirective = ['$animate', function($animate) { return { restrict: 'A', transclude: 'element', terminal: true, priority: 550, // We use 550 here to ensure that the directive is caught before others, // but after `ngIf` (at priority 600). link: function(scope, $element, attrs, ctrl, $transclude) { var previousElement, previousScope; scope.$watchCollection(attrs.ngAnimateSwap || attrs['for'], function(value) { if (previousElement) { $animate.leave(previousElement); } if (previousScope) { previousScope.$destroy(); previousScope = null; } if (value || value === 0) { $transclude(function(clone, childScope) { previousElement = clone; previousScope = childScope; $animate.enter(clone, null, $element); }); } }); } }; }];