InteractionManager¶
InteractionManager
позволяет планировать выполнение длительных задач после завершения всех взаимодействий/анимаций. В частности, это позволяет JavaScript-анимации работать плавно.
Приложения могут планировать выполнение задач после завершения взаимодействий с помощью следующего кода:
1 2 3 |
|
Сравните это с другими альтернативами планирования:
requestAnimationFrame()
для кода, который анимирует представление во времени.setImmediate/setTimeout()
запуск кода позже, обратите внимание, что это может задержать анимацию.runAfterInteractions()
запускает код позже, не задерживая активные анимации.
Система обработки касаний считает одно или несколько активных касаний "взаимодействием" и откладывает вызов runAfterInteractions()
до тех пор, пока все касания не закончатся или не будут отменены.
InteractionManager
также позволяет приложениям регистрировать анимации, создавая "хэндл" взаимодействия при запуске анимации и очищая его по завершении:
1 2 3 4 5 |
|
runAfterInteractions
принимает либо обычную функцию обратного вызова, либо объект PromiseTask
с методом gen
, который возвращает Promise
. Если передана PromiseTask
, то она полностью решается (включая асинхронные зависимости, которые также планируют дополнительные задачи через runAfterInteractions
) перед началом выполнения следующей задачи, которая могла быть поставлена в очередь синхронно ранее.
По умолчанию, поставленные в очередь задачи выполняются вместе в цикле в одном пакете setImmediate
. Если setDeadline
вызывается с положительным числом, то задачи будут выполняться только до тех пор, пока не наступит крайний срок (в терминах времени выполнения цикла событий js), после чего выполнение завершится через setTimeout, позволяя таким событиям, как касания, начать взаимодействие и блокировать выполнение поставленных в очередь задач, делая приложения более отзывчивыми.
Пример¶
Основной¶
Продвинутый пример¶
Примечание
InteractionManager.runAfterInteractions()
не работает должным образом в веб. Он срабатывает немедленно, не дожидаясь завершения взаимодействия.
Методы¶
runAfterInteractions()¶
1 |
|
Запланируйте выполнение функции после завершения всех взаимодействий. Возвращает отменяемое "обещание".
createInteractionHandle()¶
1 |
|
Уведомление менеджера о начале взаимодействия.
clearInteractionHandle()¶
1 |
|
Уведомление менеджера о завершении взаимодействия.
setDeadline()¶
1 |
|
Положительное число будет использовать setTimeout
для планирования любых задач после того, как eventLoopRunningTime
достигнет конечного значения, иначе все задачи будут выполнены в одном пакете setImmediate
(по умолчанию).