function Анимации(события) { this.создать = function() { this.анимации = {}; this.задано = {}; }; this.запустить = function(имя, элемент) { let ключ = `${элемент.id}`; // Останавливаем прошлый экземпляр этой анимации на том же элементе. this.остановить(ключ); // Запускаем новый экземпляр анимации на том же элементе. this.анимации[ключ] = new Анимация(элемент, this.задано[имя]); }; this.обновить = function(время) { var удалить = []; // Проигрываем активные анимации. for (var ключ in this.анимации) { this.анимации[ключ].обновить(время); if (!this.анимации[ключ].идёт) { удалить.push(ключ); } } // Удаляем завершившиеся анимации. for (var номер in удалить) { this.остановить(удалить[номер]); } }; this.обработатьКлюч = function(ключ, путь, значение) { if (путь[0] != "анимации") { return; } let имя = путь[1]; let свойство = путь.slice(2).join("."); if (!this.задано[имя]) { this.задано[имя] = {}; } this.задано[имя][свойство] = значение; события.уведомить(`анимации/${имя}`); }; this.остановить = function(ключ) { delete this.анимации[ключ]; }; // Конструктор. this.создать(); };