【问题标题】:CSS animation only working onceCSS动画只工作一次
【发布时间】:2015-01-16 22:07:37
【问题描述】:

我使用以下 JavaScript 代码启动 CSS 动画(elementdivname 是现有规则的名称,destination 是元素应该移动到的位置)。第一次调用此函数时,它按预期工作(div 轻轻移动到其最终目的地)。第二次,它只是跳转到目的地(因为我明确设置了lefttop),但没有发生任何移动。如果我在发生名称分配的行中设置断点 (webkitAnimationName),则动画将像第一次一样执行。我需要延迟吗?

function flyTo(element, name, destination) {
  var rule = findKeyframesRule(name);
  if (rule != null) {
    element.style.webkitAnimationName = "none";

    // remove the existing 0% and 100% rules
    rule.deleteRule("from");
    rule.deleteRule("to");

    // create new 0% and 100% rules 
    rule.insertRule("from {top: " + element.style.top + ";  left: " + element.style.left + ";}");
    rule.insertRule("to {top: " + px(destination.y) + ";    left: " + px(destination.x) + ";}");

    // assign the animation to our element (which will cause the animation to run)
    element.style.left = px(destination.x);
    element.style.top = px(destination.y);
    element.style.webkitAnimationDuration = "1s";
    element.style.webkitAnimationTimingFunction = "linear";
    element.style.webkitAnimationName = name;
  } else {
    element.style.left = px(destination.x);
    element.style.top = px(destination.y);
  }
}

我正在使用谷歌浏览器

【问题讨论】:

  • 找到解决方法:设置动画名称后,我调用了一个延迟函数,将动画名称重置为“none”。如果名称被清除并在一段代码中设置,浏览器将无法识别更改并且不执行任何操作。

标签: javascript css animation


【解决方案1】:

我不确定您的代码中的错误在哪里。但我试着给你另一个(我认为更好的解决方案)。我的滑动菜单代码示例:

#tag-menu { top: 0px; width: 270px; height: 100%; left: -370px; background: #2F535C; z-index: 9; box-shadow: 5px 5px 10px 0px rgba(84,84,84,0.25); position: fixed; display: block; transition: left 0.25s ease-out; -webkit-transition: all 0.2s ease-out; -moz-transition: all 0.2s ease-out; -o-transition: all 0.2s ease-out; -webkit-transform: translateX(-317px); -moz-transform: translateX(-317px); -o-transform: translateX(-317px); -ms-transform: translateX(-317px); } #tag-menu.active{ left:0; -webkit-transform: translateX(0px); -moz-transform: translateX(0px); -o-transform: translateX(0px); -ms-transform: translateX(0px); transform:translateX(0px); transition:all 0.2s ease-in; -webkit-transition: all 0.2s ease-in; -moz-transition: all 0.2s ease-in; -o-transition: all 0.2s ease-in; } 然后你只需添加和删除“活动”类。菜单会滑动。希望我能帮助你。 干杯

【讨论】:

  • 我猜,会有同样的问题:在删除和添加类之间,必须有一段时间,所以浏览器识别到变化并开始动画(或过渡)。我为我的问题添加了“解决方案”评论。这样它就可以与我的代码一起使用。
猜你喜欢
  • 2021-09-03
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
相关资源
最近更新 更多