mirror of
https://github.com/konvajs/konva.git
synced 2025-05-03 20:48:00 +08:00
97 lines
2.6 KiB
JavaScript
97 lines
2.6 KiB
JavaScript
///////////////////////////////////////////////////////////////////////
|
|
// Transition
|
|
///////////////////////////////////////////////////////////////////////
|
|
/**
|
|
* Transition constructor. The transitionTo() Node method
|
|
* returns a reference to the transition object which you can use
|
|
* to stop, resume, or restart the transition
|
|
* @constructor
|
|
*/
|
|
Kinetic.Transition = function(node, config) {
|
|
this.node = node;
|
|
this.config = config;
|
|
this.tweens = [];
|
|
var that = this;
|
|
|
|
// add tween for each property
|
|
function addTween(c, attrs, obj, rootObj) {
|
|
for(var key in c) {
|
|
if(key !== 'duration' && key !== 'easing' && key !== 'callback') {
|
|
// if val is an object then traverse
|
|
if(Kinetic.Type._isObject(c[key])) {
|
|
obj[key] = {};
|
|
addTween(c[key], attrs[key], obj[key], rootObj);
|
|
}
|
|
else {
|
|
that._add(that._getTween(attrs, key, c[key], obj, rootObj));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var obj = {};
|
|
addTween(config, node.attrs, obj, obj);
|
|
|
|
var finishedTweens = 0;
|
|
for(var n = 0; n < this.tweens.length; n++) {
|
|
var tween = this.tweens[n];
|
|
tween.onFinished = function() {
|
|
finishedTweens++;
|
|
if(finishedTweens >= that.tweens.length) {
|
|
that.onFinished();
|
|
}
|
|
};
|
|
}
|
|
};
|
|
/*
|
|
* Transition methods
|
|
*/
|
|
Kinetic.Transition.prototype = {
|
|
/**
|
|
* start transition
|
|
*/
|
|
start: function() {
|
|
for(var n = 0; n < this.tweens.length; n++) {
|
|
this.tweens[n].start();
|
|
}
|
|
},
|
|
/**
|
|
* stop transition
|
|
*/
|
|
stop: function() {
|
|
for(var n = 0; n < this.tweens.length; n++) {
|
|
this.tweens[n].stop();
|
|
}
|
|
},
|
|
/**
|
|
* resume transition
|
|
*/
|
|
resume: function() {
|
|
for(var n = 0; n < this.tweens.length; n++) {
|
|
this.tweens[n].resume();
|
|
}
|
|
},
|
|
_onEnterFrame: function() {
|
|
for(var n = 0; n < this.tweens.length; n++) {
|
|
this.tweens[n].onEnterFrame();
|
|
}
|
|
},
|
|
_add: function(tween) {
|
|
this.tweens.push(tween);
|
|
},
|
|
_getTween: function(attrs, prop, val, obj, rootObj) {
|
|
var config = this.config;
|
|
var node = this.node;
|
|
var easing = config.easing;
|
|
if(easing === undefined) {
|
|
easing = 'linear';
|
|
}
|
|
|
|
var tween = new Kinetic.Tween(node, function(i) {
|
|
obj[prop] = i;
|
|
node.setAttrs(rootObj);
|
|
}, Kinetic.Tweens[easing], attrs[prop], val, config.duration);
|
|
|
|
return tween;
|
|
}
|
|
};
|