javascript - 如何首先为 Anime.js 元素提供打开动画,然后再提供循环动画?

标签 javascript css animation anime.js

我正在尝试使用 Anime.js 为对象设置动画。它有一个播放一次的打开动画(旋转),之后它应该有一个无限循环的不同旋转动画。我将这两个动画放在时间轴中,但它不会循环第二个动画。

Javascript:

var tl = anime.timeline({

  easing: 'easeOutExpo',
  targets: '.fles',
});

tl

.add({
  rotate: 20,
  duration: 750,
  loop: false,
})

.add({
    duration: 6000,
    loop: true,
    easing: 'easeInOutQuad',
    keyframes: [
        {rotate: '+=1'},
        {rotate: '-=1'},
        {rotate: '+=1.5'},
        {rotate: '-=2'},
        {rotate: '+=1.5'},
    ],
})

这可以用 Anime.js 实现吗?如何实现?

提前致谢!

最佳答案

不可能用时间线来做到这一点,当你在创建时间线时传递 loop: true 时,时间线只会循环。从源代码来看,添加对象中的 loop 属性似乎被忽略。

但是您可以在 anime 实例上使用 Promise .finished:

anime({/*first animation*/}).finished.then(()=>
anime({/*next animation*/}))

并模仿继承属性:

let base = {
  easing: 'easeOutExpo',
  targets: '.fles',
}

anime(Object.assign({}, base, {
  rotate: 20,
  duration: 750,
  loop: false,
}))
.finished.then(()=>
  anime(Object.assign({}, base, {
    duration: 6000,
    loop: true,
    easing: 'easeInOutQuad',
    keyframes: [
      {rotate: '+=1'},
      {rotate: '-=1'},
      {rotate: '+=1.5'},
      {rotate: '-=2'},
      {rotate: '+=1.5'},
    ],
  })));

关于javascript - 如何首先为 Anime.js 元素提供打开动画,然后再提供循环动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62175472/

相关文章:

javascript - 禁用浏览器缩放

javascript - 为 3 <img> 的水平行创建透明覆盖

android - 如何在动画中实现带有淡入淡出的圆形图像?

user-interface - Web 或桌面应用程序中最有用的动画

javascript - 滚动固定标题不显示在移动设备上

javascript - 单击 <div> 打开对话框?

javascript - 在 Node.js 中的 res.render() 之后使用 server-sent-events

javascript - nomsdb 和 gundb 有什么区别

CSS 在打开和关闭时淡入淡出不同的字母

javascript - 用 JavaScript 替换 html 中的链接