javascript - 如何正确停止动画中间
问题描述
这是一个使用 CSS 关键帧的简单脉动动画。
问题是,如果我想丢弃或删除中间的动画,动画会以突然的动作停止(如您在片段中看到的那样突然跳转到其初始状态)。
即使您在动画中间停止动画,我也希望动画能够顺利返回其初始状态。
接受 JQuery 和 TweenMax。
有没有办法做到这一点?
let test = document.getElementById("test");
setTimeout(function(){
test.classList.add("addAniamte");
}, 2000)
setTimeout(function(){
test.classList.remove("addAniamte");
test.classList.add("removeAniamte");
console.log('stoping aniamtion!');
}, 4500)
@-webkit-keyframes pulse {
0% {
-webkit-transform: scale(1, 1);
}
50% {
-webkit-transform: scale(3, 3);
}
100% {
-webkit-transform: scale(1, 1);
};
}
#test {
background: red;
width: 20px;
height: 20px;
margin: 60px;
}
.addAniamte{
-webkit-animation: pulse 1s linear infinite;
animation: pulse 1s linear infinite;
}
.removeAniamte{
-webkit-animation: none;
animation:none;
}
<div id="test"></div>
解决方案
使用 GSAP 很容易做到这一点!以下是如何在 GSAP 3 中执行此类操作。
var tween = gsap.from("#test", {duration: 1, scale: 0.33, repeat: -1, yoyo: true, paused: true});
function startAnimation() {
tween.play();
}
function stopAnimation() {
tween.pause();
gsap.to(tween, {duration: 0.5, progress: 0});
}
#test {
background: red;
width: 60px;
height: 60px;
margin: 60px;
}
<div id="test"></div>
<button onclick="startAnimation()">Start</button>
<button onclick="stopAnimation()">Stop</button>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.0.4/dist/gsap.min.js"></script>
如果没有 GSAP(或至少是仅 JS 的方法),它会非常混乱且容易出错,正如其他答案所示。事实上,我有自己的问题导致了一篇关于该主题的 CSS-Tricks 文章。