dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
93 lines (80 loc) • 2.63 kB
JavaScript
define([
"dojo/_base/lang",
"dojo/_base/fx",
"dojo/dom-style"
], function(lang, fx, domStyle) {
// Constants used to identify which clip edge is being wiped. The values are
// the index of the clip array that is changed during the animation.
var DOWN = 2,
RIGHT = 3,
UP = 0,
LEFT = 1;
function _clipArray(/*int*/type, /*int*/w, /*int*/h, /*number*/x){
// summary:
// Returns an array containing the down, right, up, and
// left clip region based on the type. If "x" is specified,
// then it is applied to the appropriate clipping edge.
var a = [0, w, 0, 0]; // default to the top edge
if(type == RIGHT){
a = [0, w, h, w];
}else if(type == UP){
a = [h, w, h, 0];
}else if(type == LEFT){
a = [0, 0, h, 0];
}
if(x != null){
a[type] = type == DOWN || type == LEFT ? x : (type % 2 ? w : h) - x;
}
return a; /*Array*/
}
function _setClip(/*DomNode*/n, /*int*/type, /*int*/w, /*int*/h, /*number*/x){
// summary:
// Sets the clip region of the node. If a type is passed in then we
// return a rect(), otherwise return "auto".
domStyle.set(n, "clip", type == null ? "auto" : "rect(" + _clipArray(type, w, h, x).join("px,") + "px)");
}
function _wipe(/*int*/type, /*Object*/args){
// summary:
// Handles the preparation of the dom node and creates the Animation object.
var node = args.next.node,
w = args.rotatorBox.w,
h = args.rotatorBox.h;
domStyle.set(node, {
display: "",
zIndex: (domStyle.get(args.current.node, "zIndex") || 1) + 1
});
_setClip(node, type, w, h);
return new fx.Animation(lang.mixin({
node: node,
curve: [0, type % 2 ? w : h],
onAnimate: function(x){
_setClip(node, type, w, h, parseInt(x));
}
}, args));
}
var exports = {
wipeDown: function(/*Object*/args){
// summary:
// Returns a dojo.Animation that wipes in the next rotator pane from the top.
return _wipe(DOWN, args); /*dojo.Animation*/
},
wipeRight: function(/*Object*/args){
// summary:
// Returns a dojo.Animation that wipes in the next rotator pane from the right.
return _wipe(RIGHT, args); /*dojo.Animation*/
},
wipeUp: function(/*Object*/args){
// summary:
// Returns a dojo.Animation that wipes in the next rotator pane from the bottom.
return _wipe(UP, args); /*dojo.Animation*/
},
wipeLeft: function(/*Object*/args){
// summary:
// Returns a dojo.Animation that wipes in the next rotator pane from the left.
return _wipe(LEFT, args); /*dojo.Animation*/
}
};
// back-compat, remove for 2.0
lang.mixin(lang.getObject("dojox.widget.rotator"), exports);
return exports;
});