Vanilla Disintegratev1.0.0
RU
На этой странице

remove() и restore() — независимые операции. Библиотека анимирует переход, а приложение управляет содержимым и местом вставки.

Удаление элемента

Перед отсоединением библиотека измеряет живой элемент. Визуальный эффект работает в изолированном слое, когда реального узла уже нет в layout.

const operation = effects.remove(element, {
  effect: 'dust',
  retain: false,
  layout: true,
});

const result = await operation.finished;

retain по умолчанию равен false: ссылка на DOM не сохраняется. Опция layout анимирует соседей в новые позиции.

Восстановление вставленного элемента

Сначала вставьте узел туда, где он должен оказаться, и только затем вызывайте restore().

container.append(element);
await effects.restore(element, { effect: 'dust' }).finished;

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

Скрытие сделано приостановленной Web Animation, а не инлайновым стилем, поэтому переживает смену классов и стилей во время эффекта. Из каскада CSS следует одно ограничение: авторское объявление с !important приоритетнее анимаций, поэтому правило вида .card { opacity: 1 !important } на цели восстановления оставит живой элемент видимым под слоем частиц. Уберите !important с цели или восстанавливайте обёртку без него.

Совершенно новый элемент

Предварительное удаление не требуется: restore() также работает как entrance-анимация.

const message = document.createElement('aside');
message.textContent = 'Создан только что';
notifications.append(message);

effects.restore(message, { effect: 'vapor' });

Объект операции

const operation = effects.remove(element);

operation.operation; // 'remove'
operation.removalId; // RemovalId | null
operation.cancel();

const result = await operation.finished;
result.status; // 'completed' | 'cancelled' | 'skipped'

После завершения объект операции не удерживает DOM-элемент.

Отмена останавливает только визуал

cancel() останавливает анимацию и звук, но не отменяет выбранное действие с контентом: удалённый элемент остаётся удалённым, а восстанавливаемый становится видимым.

Ошибка не блокирует контент

Если захват, аудио или пользовательский эффект завершились ошибкой, удаление всё равно отсоединит узел, а восстановление покажет его. Ошибка передаётся в onError.

const effects = new Disintegrator({
  onError(error, context) {
    console.error(context.operation, error);
  },
});
Редактировать страницу на GitHub