捕捉 svg Snap.animation() 函数
Snap svg Snap.animation() function
我正在尝试创建一个包含许多变化阶段的动画,Snap.animation() 允许这样做还是我必须使用 css3 动画?感觉文档仍然缺少一些东西
最好的方法是创建一个排序函数或插件,让您的动画轮流播放,而无需对每个动画进行编码。例如,您可以将它们作为数组传递。这是我之前完成的一些代码。
在数组中,你传递给它一个对象..
el:要作用的元素
animation:要执行的动画(例如包含要动画化的属性的对象)
dur: 时长
缓动:缓动
startFunc:对每个 'frame' 的 运行 的可选回调。
请注意,如果您想要延迟之类的东西,您可能会包含一些空白帧(将属性设置为相同的值或不存在或无关紧要的值)。
function nextFrame ( frameArray, whichFrame ) {
if( whichFrame >= frameArray.length ) { return }
if( typeof frameArray[ whichFrame ].startFunc === 'function' ) {
frameArray[ whichFrame ].startFunc.call(frameArray[ whichFrame ].el)
};
frameArray[ whichFrame ].el.animate( frameArray[ whichFrame ].animation,
frameArray[ whichFrame ].dur,
frameArray[ whichFrame ].easing,
nextFrame.bind(null, frameArray, whichFrame + 1 )
);
}
// Example of use
var r = s.rect(100,100,100,100,20,20).attr({ stroke: '#123456', 'strokeWidth': 20, fill: 'red' });
var c = s.circle(50,50,50).attr({ stroke: '#123456', 'strokeWidth': 20, fill: 'blue' });
var g = s.group(r,c);
var myFrames = [
{ el: g, animation: { transform: 'r360,150,150' }, dur: 1000, easing: mina.bounce },
{ el: r, animation: { transform: 't100,-100s2,3', fill: 'green' }, dur: 1000, easing: mina.bounce },
{ el: r, animation: { transform: 't100,100' }, dur: 1000, easing: mina.bounce, startFunc: sayHello },
{ el: g, animation: { transform: 's2,1' }, dur: 1000, easing: mina.bounce },
{ el: r, animation: { transform: 's1,2' }, dur: 1000, easing: mina.bounce },
{ el: c, animation: { transform: 's1,1' }, dur: 1000, easing: mina.bounce }];
nextFrame( myFrames, 0 );
function sayHello() {
alert('hello, this is me ==> ' + this);
}
我正在尝试创建一个包含许多变化阶段的动画,Snap.animation() 允许这样做还是我必须使用 css3 动画?感觉文档仍然缺少一些东西
最好的方法是创建一个排序函数或插件,让您的动画轮流播放,而无需对每个动画进行编码。例如,您可以将它们作为数组传递。这是我之前完成的一些代码。
在数组中,你传递给它一个对象..
el:要作用的元素
animation:要执行的动画(例如包含要动画化的属性的对象)
dur: 时长
缓动:缓动
startFunc:对每个 'frame' 的 运行 的可选回调。
请注意,如果您想要延迟之类的东西,您可能会包含一些空白帧(将属性设置为相同的值或不存在或无关紧要的值)。
function nextFrame ( frameArray, whichFrame ) {
if( whichFrame >= frameArray.length ) { return }
if( typeof frameArray[ whichFrame ].startFunc === 'function' ) {
frameArray[ whichFrame ].startFunc.call(frameArray[ whichFrame ].el)
};
frameArray[ whichFrame ].el.animate( frameArray[ whichFrame ].animation,
frameArray[ whichFrame ].dur,
frameArray[ whichFrame ].easing,
nextFrame.bind(null, frameArray, whichFrame + 1 )
);
}
// Example of use
var r = s.rect(100,100,100,100,20,20).attr({ stroke: '#123456', 'strokeWidth': 20, fill: 'red' });
var c = s.circle(50,50,50).attr({ stroke: '#123456', 'strokeWidth': 20, fill: 'blue' });
var g = s.group(r,c);
var myFrames = [
{ el: g, animation: { transform: 'r360,150,150' }, dur: 1000, easing: mina.bounce },
{ el: r, animation: { transform: 't100,-100s2,3', fill: 'green' }, dur: 1000, easing: mina.bounce },
{ el: r, animation: { transform: 't100,100' }, dur: 1000, easing: mina.bounce, startFunc: sayHello },
{ el: g, animation: { transform: 's2,1' }, dur: 1000, easing: mina.bounce },
{ el: r, animation: { transform: 's1,2' }, dur: 1000, easing: mina.bounce },
{ el: c, animation: { transform: 's1,1' }, dur: 1000, easing: mina.bounce }];
nextFrame( myFrames, 0 );
function sayHello() {
alert('hello, this is me ==> ' + this);
}