使用 Polymer 核心动画根据当前值制作动画
Animate from current value with Polymer core-animation
我的 Polymer 应用程序将对象的 top
从任意位置动画化到 0
。它现在使用 Velocity 来执行此操作,因为从任何当前状态到新状态的动画方式非常明显。 Polymer 的 core-animation
是否可能(甚至是恰当的)?所有演示都在每个关键帧显示固定值。
我知道的一种方法是使用核心动画的 customEffect 回调。
此示例在单击时为按钮设置动画:
<script src="http://www.polymer-project.org/components/webcomponentsjs/webcomponents.js"></script>
<link rel="import" href="http://www.polymer-project.org/components/polymer/polymer.html">
<link rel="import" href="http://www.polymer-project.org/components/core-animation/core-animation.html">
<polymer-element name="test-element">
<template>
<core-animation id="animation" duration="1000" easing="ease-in-out" fill="forwards"></core-animation>
<div relative>
<button on-tap="{{go}}" style="position: absolute;">Click me</button>
</div>
</template>
<script>
Polymer({
go: function(e, detail, sender) {
var maxTop = 100;
// animation target
this.$.animation.target = sender;
// custom animation callback
this.$.animation.customEffect = function(timeFraction, target, animation) {
target.style.top = (maxTop * timeFraction) + "px";
};
// being the animation
this.$.animation.play();
}
});
</script>
</polymer-element>
<test-element></test-element>
我的 Polymer 应用程序将对象的 top
从任意位置动画化到 0
。它现在使用 Velocity 来执行此操作,因为从任何当前状态到新状态的动画方式非常明显。 Polymer 的 core-animation
是否可能(甚至是恰当的)?所有演示都在每个关键帧显示固定值。
我知道的一种方法是使用核心动画的 customEffect 回调。
此示例在单击时为按钮设置动画:
<script src="http://www.polymer-project.org/components/webcomponentsjs/webcomponents.js"></script>
<link rel="import" href="http://www.polymer-project.org/components/polymer/polymer.html">
<link rel="import" href="http://www.polymer-project.org/components/core-animation/core-animation.html">
<polymer-element name="test-element">
<template>
<core-animation id="animation" duration="1000" easing="ease-in-out" fill="forwards"></core-animation>
<div relative>
<button on-tap="{{go}}" style="position: absolute;">Click me</button>
</div>
</template>
<script>
Polymer({
go: function(e, detail, sender) {
var maxTop = 100;
// animation target
this.$.animation.target = sender;
// custom animation callback
this.$.animation.customEffect = function(timeFraction, target, animation) {
target.style.top = (maxTop * timeFraction) + "px";
};
// being the animation
this.$.animation.play();
}
});
</script>
</polymer-element>
<test-element></test-element>