Удаление классов

Библиотека Vex предоставляет удобные методы для создания всплывающих окон и уведомлений в веб-приложениях. Важно, что библиотека позволяет не только создавать модальные окна, но и управлять их стилями и внешним видом, что особенно полезно в случае необходимости динамического обновления интерфейса. Одним из таких действий является удаление CSS классов. Это может быть необходимо, например, для очистки или изменения стилей уведомлений после их показа. В этом разделе рассмотрим, как эффективно удалять классы с элементов, созданных с помощью Vex.

Основы работы с классами в Vex

Vex, как и многие другие библиотеки, использует механизмы работы с DOM для взаимодействия с элементами страницы. Элементы, создаваемые Vex, автоматически получают определённые CSS классы, которые отвечают за внешний вид и анимацию. Однако часто возникает необходимость динамически удалять или изменять эти классы, например, после завершения анимации или при закрытии уведомлений.

В Vex удаление классов может быть выполнено с помощью стандартных методов манипуляции DOM, таких как classList.remove(). Этот метод удаляет один или несколько классов, указанных в качестве аргументов.

Удаление классов после закрытия уведомления

Одним из распространённых случаев использования удаления классов является необходимость очистки стилей после того, как уведомление будет скрыто или закрыто. Например, уведомление может быть отображено с анимацией, а затем, после её завершения, потребуется удалить класс, который отвечает за анимацию.

Пример удаления класса после закрытия уведомления с использованием Vex:

const notification = vex.open({
    message: 'Это уведомление с анимацией',
    className: 'custom-notification', // кастомный класс
    onClose: function() {
        // Удаление класса после закрытия
        this.element.classList.remove('custom-notification');
    }
});

В этом примере создаётся уведомление с кастомным классом custom-notification. Когда уведомление закрывается, через коллбек onClose происходит удаление этого класса. Это полезно, если нужно избавиться от специфических стилей, связанных с анимацией, и вернуть элемент в его исходное состояние.

Удаление нескольких классов

Vex позволяет работать с множественными классами, и иногда возникает необходимость удалить несколько классов одновременно. Для этого можно воспользоваться classList.remove(), передав все нужные классы через запятую:

const notification = vex.open({
    message: 'Уведомление с несколькими классами',
    className: 'alert-info alert-visible', // несколько классов
    onClose: function() {
        // Удаление нескольких классов
        this.element.classList.remove('alert-info', 'alert-visible');
    }
});

Здесь, после закрытия уведомления, сразу удаляются два класса — alert-info и alert-visible. Это может быть полезно, если нужно очистить несколько стилей сразу, например, после того как уведомление исчезает с экрана.

Удаление классов с условием

Иногда необходимо удалить класс только в определённом случае. Например, в зависимости от того, было ли уведомление успешно прочитано, или если оно связано с ошибкой. В таких случаях можно использовать условия внутри метода, который будет удалять классы.

Пример с условием:

const notification = vex.open({
    message: 'Уведомление о статусе операции',
    className: 'status-message success', // начальный класс
    onClose: function() {
        if (this.element.classList.contains('success')) {
            // Удаление только в случае успеха
            this.element.classList.remove('success');
        } else {
            // Другой класс при неудаче
            this.element.classList.remove('error');
        }
    }
});

Здесь добавлен простой условный оператор, который проверяет наличие класса success и удаляет его, если уведомление связано с успешной операцией. В противном случае будет удаляться класс error.

Очистка всех классов

В некоторых случаях, например, при полной очистке уведомления или закрытии всех всплывающих окон, может потребоваться удалить все классы с элемента. Это можно сделать с помощью метода classList в сочетании с циклом, который будет перебирать все классы и удалять их по очереди.

Пример очистки всех классов:

const notification = vex.open({
    message: 'Полная очистка классов',
    className: 'alert active important', // несколько классов
    onClose: function() {
        this.element.className = ''; // очищаем все классы
    }
});

В данном примере после закрытия уведомления происходит полная очистка всех классов элемента с помощью присваивания пустой строки в className. Это наиболее быстрый способ убрать все стили, связанные с элементом.

Применение при работе с кастомными анимациями

Если уведомление использует кастомные анимации, которые включают добавление и удаление классов на протяжении времени, можно комбинировать методы удаления классов с таймерами или событиями окончания анимации. Например, если анимация уведомления должна завершиться перед удалением класса, можно использовать setTimeout или слушать событие окончания анимации.

Пример с анимацией:

const notification = vex.open({
    message: 'Уведомление с анимацией',
    className: 'fade-in',
    onClose: function() {
        // Ожидаем завершения анимации
        setTimeout(() => {
            this.element.classList.remove('fade-in');
        }, 500); // через 500 мс после завершения анимации
    }
});

Здесь класс fade-in удаляется только через 500 миллисекунд, что позволяет дождаться завершения анимации перед его удалением.

Заключение

Удаление классов в Vex — это полезный инструмент для управления состоянием модальных окон, особенно когда нужно динамически изменять их внешний вид или поведение. Важно правильно использовать методы classList.remove() и комбинировать их с коллбеками, условными операторами и таймерами для достижения желаемого эффекта.