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.

43 lines
1.4KB

  1. function Анимации(события)
  2. {
  3. this.создать = function()
  4. {
  5. this.задано = {};
  6. this.анимации = {};
  7. };
  8. this.запустить = function(имя, элемент)
  9. {
  10. let ключ = `${элемент.id}-${имя}`;
  11. // Останавливаем прошлый экземпляр этой анимации на том же элементе.
  12. if (ключ in this.анимации)
  13. {
  14. this.анимации[ключ].остановить();
  15. delete this.анимации[ключ];
  16. }
  17. // Запускаем новый экземпляр анимации на том же элементе.
  18. this.анимации[ключ] = new Анимация(элемент, this.задано[имя]);
  19. }
  20. this.обработатьКлюч = function(ключ, путь, значение)
  21. {
  22. if (путь[0] != "анимации")
  23. {
  24. return;
  25. }
  26. let имя = путь[1];
  27. let свойство = путь.slice(2).join(".");
  28. if (!this.задано[имя])
  29. {
  30. this.задано[имя] = {};
  31. }
  32. this.задано[имя][свойство] = значение;
  33. события.уведомить(`анимации/${имя}`);
  34. };
  35. // Конструктор.
  36. this.создать();
  37. };