| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { supportsScrollTimeline } from '../utils/supports/scroll-timeline.mjs';
- class GroupAnimation {
- constructor(animations) {
- // Bound to accomodate common `return animation.stop` pattern
- this.stop = () => this.runAll("stop");
- this.animations = animations.filter(Boolean);
- }
- get finished() {
- return Promise.all(this.animations.map((animation) => animation.finished));
- }
- /**
- * TODO: Filter out cancelled or stopped animations before returning
- */
- getAll(propName) {
- return this.animations[0][propName];
- }
- setAll(propName, newValue) {
- for (let i = 0; i < this.animations.length; i++) {
- this.animations[i][propName] = newValue;
- }
- }
- attachTimeline(timeline, fallback) {
- const subscriptions = this.animations.map((animation) => {
- if (supportsScrollTimeline() && animation.attachTimeline) {
- return animation.attachTimeline(timeline);
- }
- else if (typeof fallback === "function") {
- return fallback(animation);
- }
- });
- return () => {
- subscriptions.forEach((cancel, i) => {
- cancel && cancel();
- this.animations[i].stop();
- });
- };
- }
- get time() {
- return this.getAll("time");
- }
- set time(time) {
- this.setAll("time", time);
- }
- get speed() {
- return this.getAll("speed");
- }
- set speed(speed) {
- this.setAll("speed", speed);
- }
- get startTime() {
- return this.getAll("startTime");
- }
- get duration() {
- let max = 0;
- for (let i = 0; i < this.animations.length; i++) {
- max = Math.max(max, this.animations[i].duration);
- }
- return max;
- }
- runAll(methodName) {
- this.animations.forEach((controls) => controls[methodName]());
- }
- flatten() {
- this.runAll("flatten");
- }
- play() {
- this.runAll("play");
- }
- pause() {
- this.runAll("pause");
- }
- cancel() {
- this.runAll("cancel");
- }
- complete() {
- this.runAll("complete");
- }
- }
- export { GroupAnimation };
|