【发布时间】:2017-03-07 19:52:27
【问题描述】:
我正在使用 svg.js 并想播放一系列动画,然后提供一个滑块供用户控制动画以更仔细地查看它。看起来当动画完成时,svg.js 会清理资源,因此情况会被取消,所以我无法重置它。我有一个简化的例子。动画播放一次后,我希望能够使用滑块并使用 at 方法重新定位动画。
https://jsfiddle.net/voam/xeajbhea/2/
var draw = SVG('drawing'),
rectA1 = draw.rect(50, 50).fill('#f06'),
rectA2 = draw.rect(50, 50).fill('#60f').translate(200),
rectB1 = draw.rect(50, 50).fill('#ce0').translate(0, 100).opacity(0),
rectB2 = draw.rect(50, 50).fill('#0ec').translate(200, 100).opacity(0);
var animation1 = rectA1.animate().move(200).opacity(0);
var animation2 = rectA2.animate().move(-200).opacity(0).during(function(pos) {
document.getElementById("range_animation").value = pos;
});
var animation3, animation4;
animation2.after(function(situation) {
animation3 = rectB1.animate().move(200).opacity(1);
animation4 = rectB2.animate().opacity(1).move(-200)
.during(function(pos) {
document.getElementById("range_animation").value = 1 + pos;
});
console.log('animations', animation1, animation2, animation3, animation4);
});
document.getElementById("range_animation").addEventListener("change", function(el) {
///console.log('change', el, );
var val = this.value;
if (animation1.situation) {
if (val < 1) {
animation1.at(val).pause();
animation2.at(val).pause();
} else {
animation3.at(val - 1).pause();
animation4.at(val - 1).pause();
}
}
}, false);
HTML 下面
<div id="drawing">
</div>
<input type="range" id="range_animation" min="0.01" max="2" step=".01" value=".01">
【问题讨论】:
-
如何自己创建情境并将其排队以便重复使用?所以排队,运行动画,再次排队并使用?
-
或者尝试使用loop(true)循环动画——这种情况下没有清除
-
@Fuzzyma 从第一个建议开始,我不确定您所说的“自己创造情况”是什么意思。有没有这方面的例子?
-
@Fuzzyma 我已经开始使用循环方法并使用 during() 回调在动画结束之前停止以链接不同的步骤。我也尝试过使用一次(pos),但在我使用的号码(.99)上并没有如此可靠地调用它。对于循环动画,最好有 onComplete 回调,当迭代完成时,或者对于非循环动画,onBeforeComplete 回调,以便可以在动画结束之前暂停动画。感谢您的帮助!
-
svg.js 上的一切都是一个对象。甚至情况。所以你可以去做
new SVG.Situation(parameters...)。这个对象可以用相应的方法排队。
标签: javascript animation svg svg.js