javascript - CSS3 关键帧 - 更改动画持续时间会导致 "jumps"

标签 javascript jquery css css-animations

你可以在这里看到发生了什么http://goo.gl/bBMx6x (这是一个 fiddle ,它不允许我在没有 c&p 代码的情况下发布它)点击开始,等待几秒钟,然后按停止..它跳到(我认为)它本来应该在的位置从一开始就有更短的持续时间。

我想做的是让它旋转,然后停止“完成”旋转,但速度要快一点..

最佳答案

按照您尝试的方式进行操作是不可能的。 (出于您猜测的原因)

您必须在 javascript 中计算第二个动画必须开始的方式。

webkit demo

脚本是

$(document).ready(function() {
    $(".start").click(function(e) {
        e.preventDefault();
        var elem = document.getElementById('idtest');
        elem.style["-webkit-animation"] = "";
        elem.style["-webkit-animation-delay"] = "";
 
        $("#idtest").removeClass("spin2").addClass("spin");
    });
    
    $(".stop").click(function(e) {
        e.preventDefault();
        
        Stopping ();
    });
    
    $(".test").on("animationend",
        function() {
            $(this).removeClass("finishSpin");
        }
    );
});


function Stopping () {
    var elem = document.getElementById('idtest');
    var style = window.getComputedStyle (elem, null);
    var frame = style.getPropertyValue("z-index");
    var delay = - frame / 36;
    elem.style["-webkit-animation"] = "spin2 10s 1 linear";
    elem.style["-webkit-animation-delay"] = delay + "s";
    elem.className = "";
}

思路如下:

  1. 当您按下停止键时,获取计算样式以了解元素在动画中的位置
  2. 由于变换使用起来很复杂,我还设置了动画来改变一个更容易的值。在这种情况下,我选择了 z-index,但它可以是任何你想要的(当然是不可见的)
  3. 使用此值为您正在设置的新动画设置负延迟。负延迟是使过渡从中途开始的方法。

我已经将你的 fiddle 改编成只适用于 webkit,但这个想法对于其他浏览器也是一样的。

关于javascript - CSS3 关键帧 - 更改动画持续时间会导致 "jumps",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17970302/

相关文章:

javascript - 如何使 JSON 可重用

javascript - "$"在 Visual Studio 中使用 jQuery 时未定义

javascript - 尝试在问号后追加时,表单出错

javascript - 在状态更新时使用 eventListener 进行指数重新渲染

javascript - 为要使用的 jquery 函数添加多个参数的正确方法

jquery - 如何用getJSON正确返回并显示json数据?

html - Bootstrap Logo 在调整大小时不会缩小

javascript - iPad Safari 上的拖放问题

javascript - 如何设置float :right in my case using css?

css - css 中百分比单位与窗口大小和/或分辨率的关系