【发布时间】:2019-01-31 15:29:23
【问题描述】:
如何在 Dart 2 中为类似于 jQuery fadeIn 或 fadeOut 的 HTML 元素创建动画?
我在dart:html 包中看到了这个animate 方法。但是,它似乎不会将元素的样式更改为最终状态,因此在动画完成后,元素会立即像动画开始之前一样回到第一个状态。文档中还指出,调用animate 不仅会创建Animation 类,还会调用play() 方法,因此动画会在创建时自动播放。
dart:html 包中的animate 是否使用 Web 动画,因此它根本不会改变 HTML 元素的样式?如果是这样,动画完成后如何保持元素的状态?我可以看到使用 jQuery fadeIn 元素的不透明度会不时地从 0 变为最终状态 1。所以在动画完成后,元素的不透明度仍然是 1。
我希望我可以避免这种情况:
elem.animate([{"opacity": 1}, {"opacity": 0}], 100); // animation is played immediately after this
elem.style.opacity = "0"; // force set the style to 0
elem.style.display = "none"; // also force set the display to none
【问题讨论】:
-
为什么不在动画结束时自己应用样式?
-
@GünterZöchbauer 这就是我想做的。
animate方法返回的 Animation 对象似乎有onFinish方法。问题是,调用animate将在我设置 onFinish 处理程序之前自动播放动画。我可以在动画运行时通过在动画之后立即放置 onFinish 来设置它,但这似乎是一个相当肮脏的 hack。我很难找到如何在不自动播放的情况下创建动画对象,因此我可以设置 onFinish 处理程序。