动画:persist() 方法

基线 广泛可用

此功能已经过完善,并在许多设备和浏览器版本中运行。 它自 2020 年 3 月.

报告反馈

语法

persist() 方法是 Web 动画 APIAnimation 接口的显式方法,它会持久化动画,防止动画在被另一个动画替换时 自动删除
persist()

js

参数

无。

返回值

示例

无 (undefined).

使用 persist()

  • 在本例中,我们有三个按钮
  • "添加持久动画" 和 "添加瞬态动画" 都会为红色方块添加一个新的变换动画。 动画方向交替:因此第一个是左到右,第二个是右到左,依此类推。"添加持久动画" 会在创建的动画上调用 persist()

第三个按钮 "取消动画" 会取消最近添加的动画。

HTML

该示例显示了所有未取消动画的列表,按添加顺序排列,以及每个动画的 replaceState
<div id="animation-target"></div>
<button id="start-persistent">Add persistent animation</button>
<button id="start-transient">Add transient animation</button>
<button id="cancel">Cancel an animation</button>
<ol id="stack"></ol>

CSS

html
div {
  width: 100px;
  height: 100px;
  background: red;
  transform: translate(100px);
}

JavaScript

persist() 方法是 Web 动画 APIAnimation 接口的显式方法,它会持久化动画,防止动画在被另一个动画替换时 自动删除
const target = document.getElementById("animation-target");
const persistentButton = document.getElementById("start-persistent");
const transientButton = document.getElementById("start-transient");
const cancelButton = document.getElementById("cancel");
persistentButton.addEventListener("click", () => startAnimation(true));
transientButton.addEventListener("click", () => startAnimation(false));
cancelButton.addEventListener("click", cancelTop);
const stack = [];

let offset = -100;

function startAnimation(persist) {
  offset = -offset;
  const animation = target.animate(
    { transform: `translate(${100 + offset}px)` },
    { duration: 500, fill: "forwards" },
  );
  stack.push(animation);
  if (persist) {
    animation.persist();
  }
  // Add the animation to the displayed stack (implementation not shown)
  show(animation, offset);
}

function cancelTop() {
  stack.pop()?.cancel();
}

css

结果

请注意,添加新的瞬态动画将替换任何先前添加的瞬态动画。 这些动画将被自动删除,并且它们的 replaceState 将为 "removed"。 但是,持久动画将不会被删除。

规范

另请注意,删除的动画不会影响显示;<div> 的位置由最新的活动或持久动画决定。
规范
# Web 动画

浏览器兼容性

dom-animation-persist

另请参阅

  • Web 动画 API
  • 启用 JavaScript 以查看数据。
  • Animation 用于您可以用来控制网页动画的其他方法和属性。
  • Animation.replaceState