jquery - 平滑停止css无限动画

标签 jquery css css-animations infinite

我有一个具有无限动画的元素

animation: start .75s steps(19) infinite;

现在过了一段时间(这次发生变化)我想停止动画,但这样它就能顺利地结束。当我通过 jQuery 通过删除动画类来停止动画时,它就会停止。

我希望你对此有什么想法?

最佳答案

实际上,有一种更简单的方法,使用 Svelte 。假设 loading 是一个 bool 值。当 loading 为 true 时,动画应该运行。然后我们有例如一条应该上下跳跃的 SVG line

<line id="line-0" class="{animateClass ? 'animate' : ''}" x1="0" y1="0" x2="0" y2="20"/>

我们添加以下 CSS。

line {
  stroke: black;
  stroke-width: 3px;
  transition: all 0.8s ease-in-out;
}

line.animate {
  animation-direction: alternate;
  transition: all 0.8s ease-in-out;
  transform: translateY(-50%);
}

如您所见,我们使用单次运行转换。当 animate 类存在时,进行跳转转换;当 animate 类消失时,进行向下转换。

现在,我们需要一些 JavaScript 来控制起伏。

let animateClass = false;
let intervalId;

function animateLine(loading) {
  if (loading) {
    if (!intervalId) {
      animateClass = true;
      intervalId = setInterval(() => animateClass = !animateClass, 800);
     }
  } else {
    clearInterval(intervalId);
    intervalId = null;
    animateClass = false;
  }
}

$: animateLine(loading); // call the function every time loading is updated

每次 loading 发生变化时,都会调用 animateLine 函数,并在跳跃和下降过渡之间交替。这也保证了动画的顺利停止。此外,动画本身是纯 CSS,因此性能非常好。

请注意,setInterval 函数每 800 毫秒处理一次回调执行。这正是 CSS 过渡的长度。

当然,您也可以使用 Vanilla JS 来实现。然而,Svelte 提供了一些用于 react 性的语法糖。

另请参阅 blog post .

关于jquery - 平滑停止css无限动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17981192/

相关文章:

jquery - 动态加载多个模态

jquery - 当屏幕尺寸缩小时更改 div 的父级

html - css 背景图片不显示

javascript - 覆盖自动生成的图标

css - 是否可以关闭 Chrome 中的所有 CSS 动画?

jquery - 从模式提交之前检查选项

javascript - Jquery 数据表在 Internet Explorer 中显示为低亮度

html - CSS 菜单未正确对齐

css - 动画需要哪些前缀?

css - 有谁知道如何通过 CSS 创建这个 3d 翻转动画?