我正在尝试从一个半完成的 CSS 动画顺利过渡到下一个,但我找不到一种方法来做到这一点而不会出现轻微的卡顿。我有一个非常高速的无限动画,在点击时应该会慢慢减速到停止。现在,在切换动画时,我总是会遇到一些小问题,这可能部分是因为我需要等待下一个 requestAnimationFrame 才能开始下一个动画。还有其他选择吗?这大约是我正在做的事情:
function onClick(){
// get current location of element
var content = $(".content");
var currentOffset = $(content[0]).css("top");
// set property to stop jumping back to the beginning of current animation
content.css({ top: currentOffset });
// stop the current animation
content.removeClass("anim-infinite");
// update content based on current location
// updateContent(currentOffset);
// setup ease-out animation
window.requestAnimationFrame(function() {
content.addClass("anim-ease-out");
content.css({ top: parseFloat(currentOffset) + 50 });
});
}
这是相关的CSS。
@keyframes "spin" {
from { top: 0 };
to { top: -200%; }
}
.anim-infinite{
animation: spin 1s linear infinite;
}
.anim-ease-out{
transition: all 0.25s ease-out;
}
距离和时间跨度对于保持两个动画之间的恒定速度是合理的,并且我正在使用相关的浏览器前缀。
当我对第二个动画使用“线性”计时功能时,我会遇到同样的口吃。我尝试设置一个animation-fill-mode:both
,但没有成功。它似乎只影响完成的动画。
当我尝试根据内容的位置更新内容时,口吃会变得更糟——这取决于动画何时停止。