单击时如何停止动画并将其返回到第一帧?

How to stop animation when click and return it to the 1st frame?

提问人:Vladikslavus 提问时间:11/4/2023 最后编辑:Vladikslavus 更新时间:11/5/2023 访问量:29

问:

我有一个这样的css:

#turbo_fire {
  transform-box: fill-box;
  position: absolute;
  animation-name: burning;
  animation-duration: .005s;
  animation-direction: alternate;
  animation-iteration-count: infinite;
  animation-timing-function: linear;
  transform-origin: center center;
}
.burning-pause {
  animation-play-state: paused;
}
.burning-run {
  animation-play-state: running;
}

我还有我的 JS 代码,可以监听事件并在 和 类之间切换。ckick.burning-pause.burning-run

prop 只有两种状态,例如 和 。所以它没有任何停止动画值。animation-play-statepauserunning

那么问题来了,当动画停止并返回到第一帧时,如何停止动画呢?click

css css 动画

评论

1赞 Mister Jojo 11/4/2023
是否可以在 SO 片段中看到此动画?我可以更好地帮助你..或者至少有一些 HTML..
0赞 Rickard Elimää 11/4/2023
更改动画名称?还是只提供运行和暂停类的动画名称?

答:

2赞 Mister Jojo 11/5/2023 #1

在第一个位置重置动画没有真正的问题。
我想知道你给自己设置了什么样的困惑,——因为这不是问题,

——而且你没有花任何时间回答我的评论;哪怕只是一个“不”。

const btn = 
  { Xanim  : document.querySelector('#btn-anim')
  , Xpause : document.querySelector('#btn-pause')
  , Xrun   : document.querySelector('#btn-run')
  , Xreset : document.querySelector('#btn-reset')
  }

setBtnsOff( false,true,true,true );

btn.Xanim.onclick =_=> 
  { 
  bob.classList.add('anim');
  setBtnsOff( true,false,true,false );
  }
btn.Xpause.onclick =_=>
  {
  bob.classList.remove('movin-run'); 
  bob.classList.add('movin-pause');
  setBtnsOff(true,true,false,false);
  }
btn.Xrun.onclick =_=>
  {
  bob.classList.replace('movin-pause','movin-run'); 
  setBtnsOff(true,false,true,false);
  }
btn.Xreset.onclick =_=>
  {
  bob.classList.remove('anim','movin-pause','movin-run');
  setBtnsOff( false,true,true,true );
  }
 
function setBtnsOff( x_anim, x_pause, x_run, x_reset  )
  {
  btn.Xanim .disabled = x_anim;
  btn.Xpause.disabled = x_pause;
  btn.Xrun  .disabled = x_run;
  btn.Xreset.disabled = x_reset;
  }
#bob {
  margin  : 20px;
  width         : 100px;
  height        : 100px;
  background    : darkorange;
  border-radius : 50px;
  }
.anim {
  animation-name            : movin;
  animation-duration        : 2s;
  animation-timing-function : linear;
  animation-iteration-count : infinite;
  }
@keyframes movin {
    0% { transform: translateX(0); }
   50% { transform: translateX(300px); }
  100% { transform: translateX(0); }
  }

.movin-pause {
  animation-play-state: paused;
  }
.movin-run {
  animation-play-state: running;
  }

button { width : 5em; }
<button id="btn-anim"  > mov it </button>
<button id="btn-pause" > pause  </button>
<button id="btn-run"   > run    </button>
<button id="btn-reset" > reset  </button>

<div id="bob"></div>

评论

0赞 Vladikslavus 11/5/2023
这真的很简单。看来我:)过度劳累了那是因为我没有将动画放在单独的类中来切换它。现在一切正常。无论如何,谢谢身体:)
0赞 Vladikslavus 11/5/2023
别担心,伙计。正如你问的那样,我接受了你的回答作为我问题的解决方案:)