Улучшить документацию Просмотреть исходный код $animate
- $animateProvider
- Сервис в модуле ngAnimate
Сервис $animate предоставляет поддержку обнаружения анимаций при выполнении операций с DOM (вставка, удаление и перемещение), а также при добавлении и удалении классов. При выполнении любой из этих операций сервис $animate проверяет любые определенные на JavaScript анимации (которые определяются с помощью объекта поставщика $animateProvider), а также любые CSS-анимации по отношению к классам CSS, присутствующим на элементе после выполнения операции с DOM.
Сервис $animate используется в фоновом режиме с существующими директивами, и анимации с этими директивами будут работать без дополнительной настройки.
Требуется модуль ngAnimate.
Пожалуйста, посетите страницу обзора модуля ngAnimate, чтобы узнать больше о том, как использовать анимации в вашем приложении.
Обещания обратного вызова
В AngularJS 1.3 каждый из методов анимации в сервисе $animate возвращает обещание при вызове. Само обещание выполняется, когда анимация завершается, отменяется или пропускается из-за отключения анимаций. (Обратите внимание, что даже если анимация отменяется, она все равно вызовет функцию разрешения анимации.)
$animate.enter(element, container).then(function() {
//...this is called once the animation is complete...
});
Также обратите внимание, что из-за природы обещания обратного вызова, если любой код, специфичный для Angular (например, изменение области видимости, местоположения страницы и т. д.), выполняется внутри обещания обратного вызова, убедитесь, что вы обернули код с использованием $scope.$apply(...);
$animate.leave(element).then(function() {
$scope.$apply(function() {
$location.path('/new-page');
});
});
Анимацию также можно отменить, вызвав метод $animate.cancel(promise) с предоставленным обещанием, которое было возвращено при запуске анимации.
var promise = $animate.addClass(element, 'super-long-animation');
promise.then(function() {
//this will still be called even if cancelled
});
element.on('click', function() {
//tooo lazy to wait for the animation to end
$animate.cancel(promise);
});
(Обратите внимание, что отмена обещания уникальна для $animate, так как обещания в целом не могут быть отменены.)
Методы
-
animate(element, from, to, [className], [options]);
Выполняет анимацию элемента, применяя предоставленные
toиfromстили CSS к элементу. Если обнаружен любой соответствующий предоставленномуclassNameзначению CSS-переход, ключевая кадр или JavaScript, то анимация примет предоставленные стили. Например, если для данного className задана анимация перехода, то предоставленныеfromиtoстили будут применены вместе с заданным переходом. Если обнаружена анимация JavaScript, то предоставленные стили будут переданы в качестве параметров функции.ngModule.animation('.my-inline-animation', function() { return { animate : function(element, className, from, to, done) { //styles } } });Ниже представлено пошаговое описание процесса
animateанимации:Шаг анимации Вид атрибута класса элемента 1. Вызывается $animate.animate(...)class="my-animation"2. $animateожидает следующего цикла обработки, чтобы начать анимациюclass="my-animation ng-animate"3. $animateвыполняет обнаруженные на элементе анимации, заданные JavaScriptclass="my-animation ng-animate"4. К элементу добавляется класс classNameclass="my-animation ng-animate className"5. $animateсканирует стили элемента, чтобы получить длительность и задержку CSS-перехода/анимацииclass="my-animation ng-animate className"6. $animateблокирует все CSS-переходы на элементе, чтобы гарантировать, что стили класса.classNameбудут применены сразуclass="my-animation ng-animate className"7. $animateприменяет предоставленный наборfromстилей CSS к элементуclass="my-animation ng-animate className"8. $animateожидает одной кадра анимации (это выполняет пересчёт)class="my-animation ng-animate className"9. $animateудаляет блок CSS-перехода, установленный на элементеclass="my-animation ng-animate className"10. К элементу добавляется класс className-active(это запускает CSS-переход/анимацию)class="my-animation ng-animate className className-active"11. $animateприменяет наборtoстилей CSS к элементу, которые затем обрабатываются переходомclass="my-animation ng-animate className className-active"12. $animateожидает завершения анимации (через события и таймаут)class="my-animation ng-animate className className-active"13. Анимация завершается, и все сгенерированные классы CSS удаляются из элемента class="my-animation"14. Возвращённое обещание разрешается. class="my-animation"Параметры
Параметр Тип Подробности element DOMElementэлемент, который будет фокусом анимации входа
from objectнабор стилей CSS, которые будут применены к элементу в начале анимации
to objectнабор стилей CSS, к которым будет анимироваться элемент
className (необязательно)stringнеобязательный класс CSS, который будет добавлен к элементу на время анимации (по умолчанию класс
ng-inline-animate)options (необязательно)objectнеобязательный набор параметров, которые будут взяты CSS-переходом/анимацией
Возвращаемое значение
Promiseобещание обратного вызова анимации
-
enter(element, parentElement, afterElement, [options]);
Добавляет элемент к элементу parentElement, находящемуся в документе, а затем выполняет анимацию входа. После запуска анимации следующие классы CSS будут присутствовать на элементе на время анимации:
Ниже представлено пошаговое описание процесса анимации входа:
Шаг анимации Вид атрибута класса элемента 1. Вызывается $animate.enter(...)class="my-animation"2. Элемент вставляется в элемент parentElementили рядом с элементомafterElementclass="my-animation"3. $animateожидает следующего цикла обработки, чтобы начать анимациюclass="my-animation ng-animate"4. $animateвыполняет обнаруженные на элементе анимации, заданные JavaScriptclass="my-animation ng-animate"5. К элементу добавляется класс .ng-enterclass="my-animation ng-animate ng-enter"6. $animateсканирует стили элемента, чтобы получить длительность и задержку CSS-перехода/анимацииclass="my-animation ng-animate ng-enter"7. $animateблокирует все CSS-переходы на элементе, чтобы гарантировать, что стили класса.ng-enterбудут применены сразуclass="my-animation ng-animate ng-enter"8. $animateожидает одной кадра анимации (это выполняет пересчёт)class="my-animation ng-animate ng-enter"9. $animateудаляет блок CSS-перехода, установленный на элементеclass="my-animation ng-animate ng-enter"10. К элементу добавляется класс .ng-enter-active(это запускает CSS-переход/анимацию)class="my-animation ng-animate ng-enter ng-enter-active"11. $animateожидает завершения анимации (через события и таймаут)class="my-animation ng-animate ng-enter ng-enter-active"12. Анимация завершается, и все сгенерированные классы CSS удаляются из элемента class="my-animation"13. Возвращённое обещание разрешается. class="my-animation"Параметры
Параметр Тип Подробности element DOMElementэлемент, который будет фокусом анимации входа
parentElement DOMElementродительский элемент элемента, который будет фокусом анимации входа
afterElement DOMElementэлемент-последователь (предыдущий элемент) элемента, который будет фокусом анимации входа
options (необязательно)objectнеобязательный набор параметров, которые будут взяты CSS-переходом/анимацией
Возвращаемое значение
Promiseобещание обратного вызова анимации
-
leave(element, [options]);
Выполняет операцию анимации выхода и, после завершения, удаляет элемент из DOM. После запуска анимации следующие классы CSS будут добавлены на время анимации:
Ниже представлено пошаговое описание процесса анимации выхода:
Шаг анимации Вид атрибута класса элемента 1. Вызывается $animate.leave(...)class="my-animation"2. $animateвыполняет обнаруженные на элементе анимации, заданные JavaScriptclass="my-animation ng-animate"3. $animateожидает следующего цикла обработки, чтобы начать анимациюclass="my-animation ng-animate"4. К элементу добавляется класс .ng-leaveclass="my-animation ng-animate ng-leave"5. $animateсканирует стили элемента, чтобы получить длительность и задержку CSS-перехода/анимацииclass="my-animation ng-animate ng-leave"6. $animateблокирует все CSS-переходы на элементе, чтобы гарантировать, что стили класса.ng-leaveбудут применены сразуclass="my-animation ng-animate ng-leave"7. $animateожидает одной кадра анимации (это выполняет пересчёт)class="my-animation ng-animate ng-leave"8. $animateудаляет блок CSS-перехода, установленный на элементеclass="my-animation ng-animate ng-leave"9. К элементу добавляется класс .ng-leave-active(это запускает CSS-переход/анимацию)class="my-animation ng-animate ng-leave ng-leave-active"10. $animateожидает завершения анимации (через события и таймаут)class="my-animation ng-animate ng-leave ng-leave-active"11. Анимация завершается, и все сгенерированные классы CSS удаляются из элемента class="my-animation"12. Элемент удаляется из DOM ... 13. Возвращённое обещание разрешается. ... Параметры
Параметр Тип Подробности element DOMElementэлемент, который будет фокусом анимации выхода
options (необязательно)objectнеобязательный набор стилей, которые будут взяты CSS-переходом/анимацией
Возвращаемое значение
Promiseобещание обратного вызова анимации
-
move(element, parentElement, afterElement, [options]);
Вызывает операцию перемещения DOM-элемента. Непосредственно перед началом анимации служба анимации либо добавит его в контейнер parentElement, либо поместит элемент непосредственно после элемента afterElement, если он присутствует. Затем будет выполнена анимация перемещения. После запуска анимации следующие CSS-классы будут добавлены на период анимации:
Ниже приведён подробный разбор каждого шага, происходящего во время анимации перемещения:
Шаг анимации Вид атрибута класса элемента 1. $animate.move(...)вызываетсяclass="my-animation"2. Элемент перемещается в элемент parentElement или рядом с элементом afterElement class="my-animation"3. $animateожидает следующего цикла обработки для запуска анимацииclass="my-animation ng-animate"4. $animateвыполняет определённые JavaScript-анимации, обнаруженные в элементеclass="my-animation ng-animate"5. К элементу добавляется класс .ng-moveclass="my-animation ng-animate ng-move"6. $animateсканирует стили элемента, чтобы получить длительность и задержку CSS-переходов/анимацииclass="my-animation ng-animate ng-move"7. $animateблокирует все CSS-переходы элемента, чтобы гарантировать, что стили класса.ng-moveприменяются сразуclass="my-animation ng-animate ng-move"8. $animateожидает одного кадра анимации (это выполняет пересчёт)class="my-animation ng-animate ng-move"9. $animateудаляет блокировку CSS-переходов, установленную на элементеclass="my-animation ng-animate ng-move"10. Добавляется класс .ng-move-active(это запускает CSS-переход/анимацию)class="my-animation ng-animate ng-move ng-move-active"11. $animateожидает завершения анимации (через события и таймаут)class="my-animation ng-animate ng-move ng-move-active"12. Анимация завершается, и все сгенерированные CSS-классы удаляются из элемента class="my-animation"13. Возвращаемое обещание разрешается. class="my-animation"Параметры
Параметр Тип Подробности element DOMElementэлемент, который будет центром анимации перемещения
parentElement DOMElementродительский элемент элемента, который будет центром анимации перемещения
afterElement DOMElementэлемент-предок (предыдущий элемент) элемента, который будет центром анимации перемещения
options (необязательно)objectнеобязательный набор стилей, которые будут использованы CSS-переходом/анимацией
Возвращаемое значение
Promiseобещание обратного вызова анимации
-
addClass(element, className, [options]);
Вызывает пользовательское событие анимации, основанное на переменной className, а затем добавляет значение className к элементу в качестве CSS-класса. В отличие от других методов анимации, служба анимации добавит суффикс
-addк значению className, чтобы предоставить службе анимации начальные и активные CSS-классы для запуска анимации (это будет пропущено, если для CSS-переходов или ключевых кадров не определены классы -add-active или базовые CSS-классы).Ниже приведён подробный разбор каждого шага, происходящего во время анимации addClass:
Шаг анимации Вид атрибута класса элемента 1. $animate.addClass(element, 'super')вызываетсяclass="my-animation"2. $animateвыполняет определённые JavaScript-анимации, обнаруженные в элементеclass="my-animation ng-animate"3. К элементу добавляется класс .super-addclass="my-animation ng-animate super-add"4. $animateожидает одного кадра анимации (это выполняет пересчёт)class="my-animation ng-animate super-add"5. Добавляются классы .superи.super-add-active(это запускает CSS-переход/анимацию)class="my-animation ng-animate super super-add super-add-active"6. $animateсканирует стили элемента, чтобы получить длительность и задержку CSS-переходов/анимацииclass="my-animation ng-animate super super-add super-add-active"7. $animateожидает завершения анимации (через события и таймаут)class="my-animation ng-animate super super-add super-add-active"8. Анимация завершается, и все сгенерированные CSS-классы удаляются из элемента class="my-animation super"9. Родительский класс сохраняется на элементе class="my-animation super"10. Возвращаемое обещание разрешается. class="my-animation super"Параметры
Параметр Тип Подробности element DOMElementэлемент, который будет анимирован
className stringCSS-класс, который будет добавлен к элементу и затем анимирован
options (необязательно)objectнеобязательный набор стилей, которые будут использованы CSS-переходом/анимацией
Возвращаемое значение
Promiseобещание обратного вызова анимации
-
removeClass(element, className, [options]);
Вызывает пользовательское событие анимации, основанное на переменной className, а затем удаляет CSS-класс, заданный значением className, из элемента. В отличие от других методов анимации, служба анимации добавит суффикс
-removeк значению className, чтобы предоставить службе анимации начальные и активные CSS-классы для запуска анимации (это будет пропущено, если для CSS-переходов или ключевых кадров не определены классы -remove или базовые CSS-классы).Ниже приведён подробный разбор каждого шага, происходящего во время анимации removeClass:
Шаг анимации Вид атрибута класса элемента 1. $animate.removeClass(element, 'super')вызываетсяclass="my-animation super"2. $animateвыполняет определённые JavaScript-анимации, обнаруженные в элементеclass="my-animation super ng-animate"3. К элементу добавляется класс .super-removeclass="my-animation super ng-animate super-remove"4. $animateожидает одного кадра анимации (это выполняет пересчёт)class="my-animation super ng-animate super-remove"5. Добавляются классы .super-remove-activeи.superудаляется (это запускает CSS-переход/анимацию)class="my-animation ng-animate super-remove super-remove-active"6. $animateсканирует стили элемента, чтобы получить длительность и задержку CSS-переходов/анимацииclass="my-animation ng-animate super-remove super-remove-active"7. $animateожидает завершения анимации (через события и таймаут)class="my-animation ng-animate super-remove super-remove-active"8. Анимация завершается, и все сгенерированные CSS-классы удаляются из элемента class="my-animation"9. Возвращаемое обещание разрешается. class="my-animation"Параметры
Параметр Тип Подробности element DOMElementэлемент, который будет анимирован
className stringCSS-класс, который будет анимирован и затем удалён из элемента
options (необязательно)objectнеобязательный набор стилей, которые будут использованы CSS-переходом/анимацией
Возвращаемое значение
Promiseобещание обратного вызова анимации
-
setClass(element, add, remove, [options]);
Добавляет и/или удаляет заданные CSS-классы элементу. После завершения вызывается обратный вызов
done()(если указан).Шаг анимации Вид атрибута класса элемента 1. Вызывается $animate.setClass(element, 'on', 'off')class="my-animation off"2. $animateвыполняет JavaScript-анимации, определенные на элементеclass="my-animation ng-animate off"3. К элементу добавляются классы .on-addи.off-removeclass="my-animation ng-animate on-add off-remove off"4. $animateожидает одной кадра анимации (это производит пересчёт)class="my-animation ng-animate on-add off-remove off"5. К элементу добавляются классы .on,.on-add-activeи.off-remove-active, и удаляется.off(это запускает CSS-переход/анимацию)class="my-animation ng-animate on on-add on-add-active off-remove off-remove-active"6. $animateсканирует стили элемента, чтобы получить длительность и задержку CSS-перехода/анимацииclass="my-animation ng-animate on on-add on-add-active off-remove off-remove-active"7. $animateожидает завершения анимации (через события и таймаут)class="my-animation ng-animate on on-add on-add-active off-remove off-remove-active"8. Анимация завершается, и все сгенерированные CSS-классы удаляются из элемента class="my-animation on"9. Возвращаемое обещание разрешается. class="my-animation on"Параметры
Параметр Тип Подробности element DOMElementэлемент, которому будут изменены и удалены CSS-классы
add stringCSS-классы, которые будут добавлены к элементу
remove stringCSS-класс, который будет удален из CSS-классов элемента, которые были установлены на элементе
options (необязательно)objectнеобязательная коллекция стилей, которые будут использованы CSS-переходом/анимацией
Возвращаемое значение
Promiseобещание обратного вызова анимации
-
cancel(animationPromise);
Отменяет предоставленную анимацию.
Параметры
Параметр Тип Подробности animationPromise PromiseОбещание анимации, возвращаемое при запуске анимации.
-
enabled([value], [element]);
Глобально включает/отключает анимации.
Параметры
Параметр Тип Подробности value (необязательно)booleanЕсли указано, то включает или выключает анимацию.
element (необязательно)DOMElementЕсли указано, то элемент будет использован для представления операции включения/отключения
Возвращаемое значение
booleanТекущее состояние анимации.
© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://code.angularjs.org/1.3.20/docs/api/ngAnimate/service/$animate