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.

105 lines
3.4KB

  1. function Изображения(корень)
  2. {
  3. this.создать = function()
  4. {
  5. this.умолчание = {
  6. x: 0,
  7. y: 0,
  8. ширина: 100,
  9. высота: 100,
  10. угол: 0,
  11. };
  12. this.задано = {};
  13. this.элементы = {};
  14. };
  15. this.создатьИлиПолучитьЭлемент = function(имя)
  16. {
  17. var эл = this.элементы[имя];
  18. if (эл)
  19. {
  20. return эл;
  21. }
  22. var ум = this.умолчание;
  23. эл = document.createElement("div");
  24. эл.id = `изображения-${имя}`;
  25. эл.style.position = "absolute";
  26. эл.style.display = "block";
  27. // Свойства по умолчанию.
  28. эл.style.left = `${ум.x}px`;
  29. эл.style.top = `${ум.y}px`;
  30. эл.style.width = `${ум.ширина}px`;
  31. эл.style.height = `${ум.высота}px`;
  32. эл.style.transform = `rotate(${ум.угол}rad)`;
  33. this.элементы[имя] = эл;
  34. корень.appendChild(эл);
  35. return эл;
  36. };
  37. this.обновитьЭлемент = function(имя, свойство, значение)
  38. {
  39. if (!this.задано[имя])
  40. {
  41. this.задано[имя] = {};
  42. }
  43. this.задано[имя][свойство] = значение;
  44. var за = this.задано[имя];
  45. var эл = this.создатьИлиПолучитьЭлемент(имя);
  46. if (свойство == "ширина")
  47. {
  48. эл.style.width = `${за.ширина}px`;
  49. }
  50. else if (свойство == "высота")
  51. {
  52. эл.style.height = `${за.высота}px`;
  53. }
  54. else if (
  55. (свойство == "x") ||
  56. (свойство == "y") ||
  57. (свойство == "угол") ||
  58. (свойство == "вид.transform")
  59. ) {
  60. var ум = this.умолчание;
  61. var x = за.x ? за.x : ум.x;
  62. var y = за.y ? за.y : ум.y;
  63. var угол = за.угол ? за.угол : ум.угол;
  64. this.обновитьРасположение(имя, x, y, угол);
  65. }
  66. else if (свойство.startsWith("вид"))
  67. {
  68. var параметр = свойство.substring(4);
  69. эл.style.setProperty(параметр, значение);
  70. }
  71. };
  72. this.обновитьРасположение = function(имя, x, y, угол)
  73. {
  74. var за = this.задано[имя];
  75. var эл = this.элементы[имя];
  76. эл.style.left = `${x}px`;
  77. эл.style.top = `${y}px`;
  78. var transform = `rotate(${угол}deg) `;
  79. if (за["вид.transform"])
  80. {
  81. transform += за["вид.transform"];
  82. }
  83. эл.style.transform = transform;
  84. };
  85. this.обработатьКлюч = function(ключ, путь, значение)
  86. {
  87. if (путь[0] == "изображения")
  88. {
  89. var имя = путь[1];
  90. var свойство = путь.slice(2).join(".");
  91. this.обновитьЭлемент(имя, свойство, значение);
  92. }
  93. };
  94. // Конструктор.
  95. this.создать();
  96. }