CSS 动画没有遍历所有关键帧

标签 css css-animations

背景

我一直在努力学习更多关于 CSS 动画的知识。我一直主要使用来自 animate.css 等库的预构建动画。 .大多数功能都很好用,我想我更好地理解了概念和组件。

问题

但是,该库中的动画之一铰链可以在 animate.css 网站上运行,但不能在我自己的网站上运行 fiddle .它并没有完全失败,但它只进行了 3 个关键帧移动,而示例站点进行了 5-6 个。所以它使用的动画不是我期望的那样。

我责怪标题中的关键帧,因为在视觉上它似乎没有摇摆。我将此归因于关键帧不起作用,但这可能过于简单化了,或者我可能误解了这个问题,所以请注意,这是该假设的来源。

我已经使用我的主要浏览器 Chrome v35 和我计算机上的 IE 11 副本对此进行了测试,评论员指出 FF 30 没有出现此问题。他们还表明,这可能与它是一个依赖关系有关,当它被明确定义时,而不是通过 animate.css cdn 引入,它在我的浏览器中工作。

研究

我一直在做一般研究以更好地理解 CSS 动画,这 developer guide特别是有助于理解基础知识和查看实例如何工作。这些与 fiddle 结合使用特别有用,可以了解对这些示例的修改如何工作。

为了更具体地说明这个问题,我打开了源代码以查看 css 动画是如何定义的。代码发布在github上here .下面是铰链的具体关键帧

@keyframes hinge {
  0% {
    -webkit-transform-origin: top left;
    -ms-transform-origin: top left;
    transform-origin: top left;
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
  }

  20%, 60% {
    -webkit-transform: rotate3d(0, 0, 1, 80deg);
    -ms-transform: rotate3d(0, 0, 1, 80deg);
    transform: rotate3d(0, 0, 1, 80deg);
    -webkit-transform-origin: top left;
    -ms-transform-origin: top left;
    transform-origin: top left;
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
  }

  40%, 80% {
    -webkit-transform: rotate3d(0, 0, 1, 60deg);
    -ms-transform: rotate3d(0, 0, 1, 60deg);
    transform: rotate3d(0, 0, 1, 60deg);
    -webkit-transform-origin: top left;
    -ms-transform-origin: top left;
    transform-origin: top left;
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
    opacity: 1;
  }

  100% {
    -webkit-transform: translate3d(0, 700px, 0);
    -ms-transform: translate3d(0, 700px, 0);
    transform: translate3d(0, 700px, 0);
    opacity: 0;
  }
}

在查看我的样本 fiddle 与定义的关键帧相比时,它似乎只转换到每个位置一次,而不是像我预期的那样来回移动,就像它在 animate.css 页面上所做的那样。

我还验证了我正在添加与工作页面相同的类,并在 js 中添加它。我还从 animate.css 主页复制了样式并验证我有相同的 js 依赖项,看看这是否会有所不同,但这些都没有帮助。

总结

什么会导致 CSS 动画无法正确地通过它的所有关键帧,以及什么会使这个特定的铰链动画在我的 fiddle 示例中从一个页面到另一个页面的表现不同?

编辑

我测试了一些想法。 @Cbroe 提出了一个关于 jquery 的 document.ready 行为的问题,并建议使用 window.load 代替进行测试。我还想看看它是否链接到内置于外部资源管理中的 jsfiddles。为了测试,我将代码移植到这个 jsbin并明确引入 cdn 引用。我在新设置中得到了与旧设置相同的行为。

最佳答案

缩小版的 animate.css 有问题。

我改变了:

<link rel="stylesheet" type="text/css" href="http://cdnjs.cloudflare.com/ajax/libs/animate.css/3.1.0/animate.min.css">

收件人:

<link rel="stylesheet" type="text/css" href="http://cdnjs.cloudflare.com/ajax/libs/animate.css/3.1.0/animate.css">

它在 Chrome 和 Safari 中工作。奇怪的。缩小器一定有问题吗?

http://jsbin.com/luvixoxu/1/edit


一些旁注。您不再需要在 Javascript 中使用 CDATA。那是针对多年前不识别脚本标签的浏览器;值得庆幸的是,我们已经过去了。从技术上讲,HTML5 甚至不需要“type="text/javascript"',因为它是默认设置。

您可能不需要 jQuery 来延迟; CSS 动画有一个延迟选项。尽可能避免设置超时。

http://jsbin.com/pumigeqo/1/edit

不要使用 $(window).load();这只会在整个页面(包括图像)加载后触发。您不需要 onload 函数,只需将脚本标记放在紧挨着结束主体之前。头部的 CSS 将在 HTML 之前加载,HTML 将加载,然后 Javascript 将被触发。我还建议将 jQuery 移动到内联脚本的正上方,否则会延迟页面加载。

关于CSS 动画没有遍历所有关键帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24833669/

相关文章:

css - Animation-delay 那么伪类之前呢?

html - 如何在比例动画中将原点保持在图像的中心?

CSS 类和小部件 : three questions

css - SVG 元素的反转动画

html - 使用页眉和页脚 div 重叠中间内容

css - 在 Chrome 中拖动时更改 HTML5 Canvas 上的光标

CSS3 旋转摆动

css - 从动画中过渡

javascript - 当鼠标悬停在其他元素上时将鼠标悬停在某些元素上

css - 使用纯CSS3绘制形状的问题