ПлавноОтобразитьСкрыть = function(элемент, настройки = null) { this.отобразить = () => { this.показываем = true; элемент.style.display = "block"; this.преобразования.innerHTML = ` #${элемент.id} { opacity: 0; animation: ${элемент.id}ПлавноОтобразить 0.4s ease; animation-fill-mode: forwards; animation-delay: ${this.настройки.задержка}s; } `; }; this.скрыть = () => { this.показываем = false; this.преобразования.innerHTML = ` #${элемент.id} { opacity: ${this.настройки.прозрачность}; animation: ${элемент.id}ПлавноСкрыть 0.4s ease; animation-fill-mode: forwards; animation-delay: ${this.настройки.задержка}s; } `; }; this.__задатьНастройкиПоУмолчанию = () => { var умолчание = { "задержка": 0, "прозрачность": 1, "отклик": {}, }; if (!настройки) { this.настройки = умолчание; } else { this.настройки = настройки; } for (var ключ in умолчание) { if (!(ключ in this.настройки)) { this.настройки[ключ] = умолчание[ключ]; } } }; this.__создатьКадры = () => { this.кадры = document.createElement("style"); document.head.appendChild(this.кадры); this.кадры.innerHTML = ` @keyframes ${элемент.id}ПлавноОтобразить { 0% { opacity: 0; } 100% { opacity: ${this.настройки.прозрачность}; } } @keyframes ${элемент.id}ПлавноСкрыть { 0% { opacity: ${this.настройки.прозрачность}; } 100% { opacity: 0; } } `; }; this.__создатьПреобразования = () => { this.преобразования = document.createElement("style"); document.head.appendChild(this.преобразования); }; this.__отслеживатьЗавершениеАнимации = () => { this.показываем = true; var тут = this; элемент.addEventListener( "animationend", function() { if (тут.показываем && тут.настройки.отклик.отображение) { тут.настройки.отклик.отображение(); } else if (!тут.показываем) { элемент.style.display = "none"; if (тут.настройки.отклик.скрытие) { тут.настройки.отклик.скрытие(); } } } ); }; // Конструктор. this.__задатьНастройкиПоУмолчанию(); this.__создатьКадры(); this.__создатьПреобразования(); this.__отслеживатьЗавершениеАнимации(); }; // Часто используемые варианты в одну строку. // 常用的单线变型 // Frequently used single line variants. плавноСкрытьИУдалить = (id, настройки = null) => { var элемент = $(`#${id}`); var плавно = new ПлавноОтобразитьСкрыть(элемент.get(0), настройки); плавно.настройки.отклик.скрытие = function() { элемент.remove(); }; плавно.скрыть(); };