【问题标题】:How stay final state of animation CSS and remove animation property?如何保持动画 CSS 的最终状态并删除动画属性?
【发布时间】:2016-08-20 14:25:27
【问题描述】:

我想保留 css 动画的最终属性,但删除动画属性本身,例如:

@keyframes('foo')
{
  0% { opacity: 0; }
  to { opacity: 1; }
}

开头:

.my_element
{
   opacity: 0;
}

我通过 Javascript 应用动画,所以我得到了:

.my_element
{
   opacity: 0;
}

element.style
{
   animation: foo 1s forwards; #with opacity: 1; at the end.
}

现在我需要清理:

.my_element
{
   opacity: 0;
}

element.style 
{
  opacity: 1;
}

我该怎么做?

【问题讨论】:

  • animation-play-state?
  • 这是你真正的动画吗?否则你可以冻结一个过渡,所以它需要很长时间才能回到初始值codepen.io/gc-nomade/pen/wGEXer(悬停不可见的 p 并将鼠标移出)

标签: javascript css animation opacity


【解决方案1】:

这完全符合您的要求。在animationEnd 上,cleanUp 函数被传递一个对象,该对象包含动画后要移除的类、元素上要替换的属性以及元素上要替换的属性值。在单击按钮之前和之后检查 DOM,您会发现它可以正常工作。

var el      = document.querySelector(".my_element"),
    cleanUp = function(data) {
      el.classList.remove(data.remove);
      el.style[data.prop] = data.val;
    },
    startAnimation = function() {
      el.classList.add("animate");
    };

el.addEventListener("animationend", function() {
  var cleanup_data = {
    remove: "animate",
    prop: "opacity",
    val: 1
  };
  
  cleanUp(cleanup_data);
});
@keyframes foo {
  from { opacity: 0; }
  to { opacity: 1; }
}

.animate {
  animation: foo 3s forwards;
}

.my_element {
  opacity: 0;
}
<div class="my_element">some text</div>
<button onclick="startAnimation()">Start Animation</button>

【讨论】:

  • 是的,但您必须在 javascript 中定义最终属性。如果我使用其他动画,这将不起作用。我需要通用方法。
  • 我会为你做一个通用的函数。
  • 好的,我等着看你是怎么做到的^^
  • 不幸的是,使这个通用化需要您的 HTML 在关键帧动画中包含关于属性名称的少量提示(这并不理想)。对于转换,我们可以使用event.originalEvent.propertyName 来判断哪些属性发生了转换。动画没有这样的访问权限,无法自动运行问题的清理部分。我尽力了,但这不是可能发生的事情。这是我得到的。 codepen.io/antibland/pen/QNVxBB
猜你喜欢
  • 1970-01-01
  • 2012-10-11
  • 2019-01-30
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
相关资源
最近更新 更多