Vanilla Disintegratev1.0.0
ZH
本页内容

remove()restore() 是独立操作。库负责过渡动画,应用负责内容状态和插入位置。

删除元素

库在分离节点前测量真实元素。节点离开布局后,视觉效果在隔离覆盖层中继续运行。

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 实现,而非内联样式,因此在效果播放期间修改 class 或 style 都不会破坏它。由 CSS 层叠可推出一个限制:作者样式中的 !important 优先于动画,因此恢复目标上的 .card { opacity: 1 !important } 会让真实元素显示在粒子层下方。请去掉目标上的 !important,或改为恢复一个不带该声明的包装元素。

动画显示全新元素

不需要之前调用 remove()restore() 也可作为入场动画。

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 传递给应用。

在 GitHub 上编辑此页