javascript Anime.js -防止动画再次播放

eufgjt7s  于 2023-01-16  发布在  Java
关注(0)|答案(1)|浏览(159)
let gameInit = anime.timeline({
  easing: "easeInOutExpo",
  duration: 3000,
});

gameInit
  .add({
    targets: ".buttondiv",
    scale: [0, 1],
    delay: 1000,
    duration: 750,
  })
  .add(
    {
      targets: "#srps-div",
      opacity: [0, 1],
      translateY: [-50, 0],
      duration: 750,
    },
    "-=200"
  )
  .add(
    {
      targets: "#srps-tag",
      opacity: [0, 1],
      duration: 750,
    },
    "-=800"
  )
  .add(
    {
      targets: "#code-tag",
      opacity: [0, 1],
      duration: 750,
    },
    "-=950"
  );

gameInit.finished.then(function () {
  let buttonBounce = anime.timeline({
    duration: 1200,
    easing: "easeInOutExpo",
    loop: true,
    direction: "alternate",
    delay: 3000,
  });

  buttonBounce.add({
    targets: ".buttondiv",
    scale: [1, 1.25],
  });
});

document.querySelector(".buttondiv").onclick = function(){gameStart()};

gameStart = () => {
  let startGameAni = anime.timeline({
    duration: 1250,
    easing: "easeOutBack",
    direction: 'fowards',
    loop: false
  });

  startGameAni
    .add({
      targets: ".buttondiv",
      translateX: [0, -3000],
      opacity: [1, 0]
    })
    .add({
      targets: "#choiceprompt",
      opacity: [0, 1],
      translateX:[3000, 0]
    },);
};

这是我当前的动画文件。
gameInit是一对简单的动画,用户访问网站后会调用。一旦gameInit完成,buttonBounce将启动并每3秒做一个短缩放效果。
当玩家点击按钮时,它会从画面中移到左边,choiceprompt会从右边出现,这是用startGameAni完成的。
请在此处查看有关此问题的简短视频:
https://streamable.com/cyidwj [24小时后失效]

我的问题:

  • 我如何保持屏幕上的提示?当我点击任何地方附近的选择提示,特别是在中间,它再次启动动画。我不想这样。它神奇地让按钮再次出现,并再次做动画与提示再次出现。我如何才能迫使动画不重放动画后,鼠标点击?
xfb7svmp

xfb7svmp1#

我刚自己修好的。有兴趣的朋友:
即使动画将某些元素发送到屏幕外,该元素仍在那里,可能隐藏在其原始位置,并可能干扰附近的其他元素。我已将动画中的初始位置更改为屏幕外,并在动画期间将其带到屏幕上。
当包含滑动的动画完成后,我在时间轴中添加了另一个动画,它将未使用的元素发送到主元素上方3000像素处。现在它已经不碍事了,一切都正常工作:

document.querySelector(".buttondiv").onclick = function () {
  gameStart();
};

gameStart = () => {
  let startGameAni = anime.timeline({
    duration: 1200,
    easing: "easeInOutBack",
    direction: "fowards",
    loop: false,
  });

  startGameAni
    .add({
      targets: ".buttondiv",
      translateX: [0, -3000],
      opacity: [1, 0],
    })
    .add({
      targets: "#choiceprompt",
      opacity: [0, 1],
      translateX: [3000, 0],
    })
    .add({
      targets: ".buttondiv",
      marginTop: [0, -3000],
    });
};

相关问题