You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
985 B
42 lines
985 B
/* |
|
DynAPI Distribution |
|
Slide Animation Extension |
|
|
|
The DynAPI Distribution is distributed under the terms of the GNU LGPL license. |
|
|
|
requires: dynapi.fx.Thread |
|
*/ |
|
|
|
// Generates a path between 2 points, stepping inc pixels at a time |
|
function SlideAnimation(x1,y1,x2,y2,inc) { |
|
var n,dx,dy,lx,ly,p=[]; |
|
if (x2==null) x2 = x1; |
|
if (y2==null) y2 = y1; |
|
|
|
lx = x2-x1; |
|
ly = y2-y1; |
|
n = Math.sqrt(Math.pow(lx,2) + Math.pow(ly,2))/(inc||10); |
|
dx = lx/n; |
|
dy = ly/n; |
|
for (var i=0;i<n;i++) { |
|
p[i*2] = x1 + Math.round(dx*i); |
|
p[i*2+1] = y1 + Math.round(dy*i); |
|
} |
|
if (p[i*2-2] != x2 || p[i*2-1] != y2) { |
|
p[i*2] = x2; |
|
p[i*2+1] = y2; |
|
} |
|
return p; |
|
}; |
|
|
|
|
|
DynLayer.prototype.slideTo = function(x2,y2,inc,ms) { |
|
if (this.x!=x2 || this.y!=y2) { |
|
if (!this._thread) this._thread = new Thread(this); |
|
if (ms) this._thread.interval = ms; |
|
this._thread.play(SlideAnimation(this.x,this.y,x2,y2,inc)); |
|
} |
|
}; |
|
DynLayer.prototype.slideStop = function () { |
|
if (this._thread) this._thread.stop(); |
|
};
|
|
|