【问题标题】:CSS3 keyframes - changing animation duration causes "jumps"CSS3 关键帧 - 改变动画持续时间会导致“跳跃”
【发布时间】:2013-09-14 16:32:08
【问题描述】:

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

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

【问题讨论】:

  • StartStop 甚至无法在 IE10 上运行

标签: javascript jquery css css-animations


【解决方案1】:

按照您尝试的方式是不可能的。 (而且你猜的原因)

您必须在 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. 使用此值可对您正在设置的新动画设置负延迟。负延迟是让过渡在中途开始的方式。

我只将你的小提琴改编为 webkit,但其他浏览器的想法是一样的。

【讨论】:

  • 演示正在将其发送回开始。
猜你喜欢
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2013-04-20
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多