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.
182 lines
5.4 KiB
182 lines
5.4 KiB
/* |
|
DynAPI Distribution |
|
Swiper Animation Extension - originally designed by Erik Arvidsson (http://web.eae.net) |
|
IncDec addon - Created by Daniel Tiru (http://www.tiru.se) |
|
|
|
The DynAPI Distribution is distributed under the terms of the GNU LGPL license. |
|
|
|
requires: DynLayer |
|
|
|
*/ |
|
|
|
Swiper = {}; // used by dynapi.library |
|
|
|
DynLayer.prototype.swipeTo = function(dir, steps, ms, min) { |
|
|
|
this._swipeSteps = (steps!=null)? steps: 4; |
|
this._swipeMS = (ms!=null)? ms:25; |
|
this._swipeDir=dir; |
|
this._swiperMin=min; |
|
if (this._swiperMinimized==null) { |
|
this._swiperMinimized = 0 |
|
} |
|
|
|
if (this.swipeTimer != null) window.clearTimeout(this.swipeTimer); |
|
|
|
if (!this._swipeCnt) { // No animation yet! |
|
this._swipeOrgX = this.getX(); |
|
this._swipeOrgY = this.getY(); |
|
this._swipeOrgWidth = this.getWidth(); |
|
this._swipeOrgHeight = this.getHeight(); |
|
} |
|
|
|
this._swipeCnt = this._swipeSteps; |
|
if (dir.substr(0,3)!='dec' && dir.substr(0,3)!='inc') { |
|
this.setClip([0,0,0,0]); |
|
} |
|
window.setTimeout(this+"._swipe()", this._swipeMS); |
|
}; |
|
DynLayer.prototype._swipe = function() { |
|
var steps = this._swipeSteps; |
|
var x = this._swipeOrgX; |
|
var y = this._swipeOrgY; |
|
var w = this._swipeOrgWidth; |
|
var h = this._swipeOrgHeight; |
|
var min = this._swiperMin; |
|
|
|
if (this._swipeCnt == 0) { |
|
if (this._swipeDir.substr(0,3)!='dec' && this._swipeDir.substr(0,3)!='inc') { |
|
this.setClip([0, w, h,0]); |
|
} |
|
else if(this._swipeDir.substr(0,3)=='dec') { |
|
this._swiperMinimized=1; |
|
} |
|
else if(this._swipeDir.substr(0,3)=='inc') { |
|
this._swiperMinimized=0; |
|
} |
|
this.invokeEvent('swipefinish'); |
|
return; |
|
} |
|
else { |
|
this._swipeCnt--; |
|
this.setVisible(true); |
|
switch (this._swipeDir) { |
|
case "bottom": //down (see the numpad) |
|
this.setClip([h * this._swipeCnt / steps, w, h, 0]); |
|
this.setY(y - h * this._swipeCnt / steps); |
|
break; |
|
case "top": |
|
this.setClip([0, w, h * (steps - this._swipeCnt) / steps, 0]); |
|
this.setY(y + h * this._swipeCnt / steps); |
|
break; |
|
case "right": |
|
this.setClip([0, w, h,w * this._swipeCnt / steps]); |
|
this.setX(x - w * this._swipeCnt / steps); |
|
break; |
|
case "left": |
|
this.setClip([0, w * (steps - this._swipeCnt) / steps, h, 0]); |
|
this.setX(x + w * this._swipeCnt / steps); |
|
break; |
|
case "bottom-right": |
|
this.setClip([h * this._swipeCnt / steps, w, h, w * this._swipeCnt / steps]); |
|
this.setX(x - w * this._swipeCnt / steps); |
|
this.setY(y - h * this._swipeCnt / steps); |
|
break; |
|
case "bottom-left": |
|
this.setClip([h * this._swipeCnt / steps, w * (steps - this._swipeCnt) / steps, h, 0]); |
|
this.setX(x + w * this._swipeCnt / steps); |
|
this.setY(y - h * this._swipeCnt / steps); |
|
break; |
|
case "top-left": |
|
this.setClip([0, w * (steps - this._swipeCnt) / steps, h * (steps - this._swipeCnt) / steps, 0]); |
|
this.setX(x + w * this._swipeCnt / steps); |
|
this.setY(y + h * this._swipeCnt / steps); |
|
break; |
|
case "top-right": |
|
this.setClip([0, w, h * (steps - this._swipeCnt) / steps, w * this._swipeCnt / steps]); |
|
this.setX(x - w * this._swipeCnt / steps); |
|
this.setY(y + h * this._swipeCnt / steps); |
|
break; |
|
// inc-dec |
|
case "dec-right": |
|
if (this._swiperMinimized==0) { |
|
if ((w/steps*this._swipeCnt) > min) { |
|
this.setClip([0, (w/steps*this._swipeCnt), h, 0]); |
|
} |
|
else this.setClip([0, min, h, 0]); |
|
} |
|
break; |
|
case "inc-right": |
|
//var clippos = this.getClip().toString().split(','); |
|
if (this.getClip()[1] < w-(w/steps*this._swipeCnt)) { |
|
if (this._swiperMinimized==1) { |
|
this.setClip([0, w-(w/steps*this._swipeCnt), h, 0]); |
|
} |
|
} |
|
break; |
|
case "dec-left": |
|
if (this._swiperMinimized==0) { |
|
if ((w/steps*this._swipeCnt) > min) { |
|
this.setClip([0, Math.round(w/steps*this._swipeCnt), h, 0]); |
|
this.setX(w+(x-(Math.round(w/steps*this._swipeCnt)))); |
|
} |
|
else{ |
|
this.setClip([0, min, h, 0]); |
|
this.setX(w+x-min); |
|
} |
|
} |
|
break; |
|
case "inc-left": |
|
if (this._swiperMinimized==1) { |
|
if (this.getClip()[1] < w-Math.round(w/steps*this._swipeCnt)) { |
|
this.setClip([0, w-Math.round(w/steps*this._swipeCnt), h, 0]); |
|
if (w-(w/steps*this._swipeCnt) < x) { |
|
this.setX(x-(w-Math.round(w/steps*(this._swipeCnt)+min))); |
|
} |
|
else this.setX((steps*w/steps)-(x)); |
|
} |
|
} |
|
break; |
|
case "dec-down": |
|
if (this._swiperMinimized==0) { |
|
if ((h/steps*this._swipeCnt) > min) { |
|
this.setClip([0, w, (h/steps*this._swipeCnt), 0]); |
|
} |
|
else this.setClip([0, w, min, 0]); |
|
} |
|
break; |
|
case "inc-down": |
|
if (this._swiperMinimized==1) { |
|
if (this.getClip()[2] < h-(h/steps*this._swipeCnt)) { |
|
this.setClip([0,w, h-(h/steps*this._swipeCnt), 0]); |
|
} |
|
} |
|
break; |
|
case "dec-up": |
|
if (this._swiperMinimized==0) { |
|
if ((h/steps*this._swipeCnt) > min) { |
|
this.setClip([0, w, Math.round(h/steps*this._swipeCnt), 0]); |
|
this.setY((h+y-(Math.round(h/steps*this._swipeCnt)))); |
|
} |
|
else{ |
|
this.setClip([0, w, min, 0]); |
|
this.setY(h+y-min); |
|
} |
|
} |
|
break; |
|
case "inc-up": |
|
if (this._swiperMinimized==1) { |
|
if (this.getClip()[2] < h-Math.round(h/steps*this._swipeCnt)) { |
|
this.setClip([0, w, h-Math.round(h/steps*this._swipeCnt), 0]); |
|
if (h-(h/steps*this._swipeCnt) < y) { |
|
this.setY(y-(h-Math.round(h/steps*(this._swipeCnt)+min))); |
|
} |
|
else this.setY((steps*h/steps)-(y-min)); |
|
} |
|
} |
|
break; |
|
} |
|
this.swipeTimer = window.setTimeout(this+"._swipe()", this._swipeMS); |
|
} |
|
}; |
|
|
|
|