You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
2.0KB

  1. function Анимации(события)
  2. {
  3. this.создать = function()
  4. {
  5. this.анимации = {};
  6. this.задано = {};
  7. };
  8. this.запустить = function(имя, элемент)
  9. {
  10. let ключ = `${элемент.id}`;
  11. // Останавливаем прошлый экземпляр этой анимации на том же элементе.
  12. this.остановить(ключ);
  13. // Запускаем новый экземпляр анимации на том же элементе.
  14. this.анимации[ключ] = new Анимация(элемент, this.задано[имя]);
  15. };
  16. this.обновить = function(время)
  17. {
  18. var удалить = [];
  19. // Проигрываем активные анимации.
  20. for (var ключ in this.анимации) {
  21. this.анимации[ключ].обновить(время);
  22. if (!this.анимации[ключ].идёт)
  23. {
  24. удалить.push(ключ);
  25. }
  26. }
  27. // Удаляем завершившиеся анимации.
  28. for (var номер in удалить) {
  29. this.остановить(удалить[номер]);
  30. }
  31. };
  32. this.обработатьКлюч = function(ключ, путь, значение)
  33. {
  34. if (путь[0] != "анимации")
  35. {
  36. return;
  37. }
  38. let имя = путь[1];
  39. let свойство = путь.slice(2).join(".");
  40. if (!this.задано[имя])
  41. {
  42. this.задано[имя] = {};
  43. }
  44. this.задано[имя][свойство] = значение;
  45. события.уведомить(`анимации/${имя}`);
  46. };
  47. this.остановить = function(ключ)
  48. {
  49. delete this.анимации[ключ];
  50. };
  51. // Конструктор.
  52. this.создать();
  53. };