Пользовательский интерфейс Маджонга | Mahjong user interface
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

103 linhas
2.8KB

  1. function ПлавноеОтображениеИСкрытиеЭлемента(элемент, настройки)
  2. {
  3. if (!настройки)
  4. {
  5. настройки = {
  6. "прозрачность": 1,
  7. };
  8. }
  9. this.отобразить = () =>
  10. {
  11. this.показываем = true;
  12. элемент.style.display = "block";
  13. this.преобразования.innerHTML = `
  14. #${элемент.id}
  15. {
  16. opacity: 0;
  17. animation: ${элемент.id}ПлавноОтобразить 0.4s ease;
  18. animation-fill-mode: forwards;
  19. }
  20. `;
  21. };
  22. this.скрыть = () =>
  23. {
  24. this.показываем = false;
  25. this.преобразования.innerHTML = `
  26. #${элемент.id}
  27. {
  28. opacity: ${настройки.прозрачность};
  29. animation: ${элемент.id}ПлавноСкрыть 0.4s ease;
  30. animation-fill-mode: forwards;
  31. }
  32. `;
  33. };
  34. this.__создатьКадры = () =>
  35. {
  36. this.кадры = document.createElement("style");
  37. document.head.appendChild(this.кадры);
  38. this.кадры.innerHTML = `
  39. @keyframes ${элемент.id}ПлавноОтобразить
  40. {
  41. 0%
  42. {
  43. opacity: 0;
  44. }
  45. 100%
  46. {
  47. opacity: ${настройки.прозрачность};
  48. }
  49. }
  50. @keyframes ${элемент.id}ПлавноСкрыть
  51. {
  52. 0%
  53. {
  54. opacity: ${настройки.прозрачность};
  55. }
  56. 100%
  57. {
  58. opacity: 0;
  59. }
  60. }
  61. `;
  62. };
  63. this.__создатьПреобразования = () =>
  64. {
  65. this.преобразования = document.createElement("style");
  66. document.head.appendChild(this.преобразования);
  67. };
  68. this.__отслеживатьЗавершениеАнимации = () =>
  69. {
  70. this.отклик = {};
  71. this.показываем = true;
  72. var тут = this;
  73. элемент.addEventListener(
  74. "animationend",
  75. function()
  76. {
  77. if (тут.показываем && тут.отклик.отображение)
  78. {
  79. тут.отклик.отображение();
  80. }
  81. else if (!тут.показываем)
  82. {
  83. элемент.style.display = "none";
  84. if (тут.отклик.скрытие)
  85. {
  86. тут.отклик.скрытие();
  87. }
  88. }
  89. }
  90. );
  91. };
  92. // Конструктор.
  93. this.__создатьКадры();
  94. this.__создатьПреобразования();
  95. this.__отслеживатьЗавершениеАнимации();
  96. };