对由 Polymer 中的数据绑定引起的 DOM 变化做出反应

React on DOM changes caused by Data Binding in Polymer

在探索 Polymer 和 Dart 的纯粹魅力时,我努力让一些东西在通过数据绑定插入到 DOM 后立即动画化。

示例

<template repeat="{{item in items}}">
    <my-item item="{{item}}"></my-item>
</template>

每次插入新项目或删除旧项目时,我都想对这些更改进行动画处理。

目前我正在做这样的事情,它有效但不是很好:

<style>
[item] { transition: 300ms ease-in-out; transform: translateX(0); ]
[require-start-animation] { transform: translateX(-100%); }
</style>
<template repeat="{{item in items}}">
    <my-item item="{{item}}" require-start-animation></my-item>
</template>

在删除它之前,我将 'require-end-animation' 添加到将要删除的元素中。 该解决方案有效但并不是那么好,因为我必须跟踪很多东西,例如在正确的时间添加正确的属性并将其删除。对过渡结束等做出反应。

因此我想问你,是否有更简洁的方法来对由数据绑定引起的 DOM 的更改做出反应?

您可以创建一个 mixin,它覆盖 attacheddetached 并在将调用转发给 super(元素本身)之前执行属性 setting/removal,然后将此 mixin 应用于元素你想要动画。

我自己还没有经常使用 mixins。如果 mixins 对此效果不佳,您可以在普通 class 中创建一个实现,然后将对 attacheddetached 的调用转发给该实现。

它也可以创建一个包装器元素,它只包装您想要设置动画的元素并在 attach/detach 上实现动画。