8398c9048d
code was modified slightly, so the code differs from the original downloadable 1.9.5 version
149 lines
4.2 KiB
JavaScript
149 lines
4.2 KiB
JavaScript
dojo.provide("dojox.widget.FisheyeLite");
|
|
dojo.experimental("dojox.widget.FisheyeLite");
|
|
|
|
dojo.require("dijit._Widget");
|
|
dojo.require("dojo.fx.easing");
|
|
|
|
dojo.declare("dojox.widget.FisheyeLite",
|
|
dijit._Widget,
|
|
{
|
|
// summary: A Light-weight Fisheye Component, or an exhanced version
|
|
// of dojo.fx.Toggler ...
|
|
//
|
|
// description:
|
|
// A Simple FisheyeList-like widget which (in the interest of
|
|
// performance) relies on well-styled content for positioning,
|
|
// and natural page layout for rendering.
|
|
//
|
|
// use position:absolute/relative nodes to prevent layout
|
|
// changes, and use caution when seleting properties to
|
|
// scale. Negative scaling works, but some properties
|
|
// react poorly to being set to negative values, IE being
|
|
// particularly annoying in that regard.
|
|
//
|
|
// quirk: uses the domNode as the target of the animation
|
|
// unless it finds a node class="fisheyeTarget" in the container
|
|
// being turned into a FisheyeLite instance
|
|
//
|
|
// example:
|
|
// | // make all the LI's in a node Fisheye's:
|
|
// | dojo.query("#node li").forEach(function(n){
|
|
// | new dojox.widget.FisheyeLite({},n);
|
|
// | });
|
|
//
|
|
//
|
|
// example:
|
|
// | new dojox.widget.FisheyeLite({
|
|
// | properties:{
|
|
// | // height is literal, width is multiplied
|
|
// | height:{ end: 200 }, width:2.3
|
|
// | }
|
|
// | }, "someNode");
|
|
//
|
|
// duationIn: Integer
|
|
// The time (in ms) the run the show animation
|
|
durationIn: 350,
|
|
|
|
// easeIn: Function
|
|
// An easing function to use for the show animation
|
|
easeIn: dojo.fx.easing.backOut,
|
|
|
|
// durationOut: Integer
|
|
// The Time (in ms) to run the hide animation
|
|
durationOut: 1420,
|
|
|
|
// easeOut: Function
|
|
// An easing function to use for the hide animation
|
|
easeOut: dojo.fx.easing.elasticOut,
|
|
|
|
// properties: Object
|
|
// An object of "property":scale pairs, or "property":{} pairs.
|
|
// defaults to font-size with a scale of 2.75
|
|
// If a named property is an integer or float, the "scale multiplier"
|
|
// is used. If the named property is an object, that object is mixed
|
|
// into the animation directly. eg: height:{ end:20, unit:"em" }
|
|
properties: null,
|
|
|
|
// unit: String
|
|
// Sometimes, you need to specify a unit. Should be part of
|
|
// properties attrib, but was trying to shorthand the logic there
|
|
unit:"px",
|
|
|
|
constructor: function(props, node){
|
|
this.properties = props.properties || {
|
|
fontSize: 2.75
|
|
}
|
|
},
|
|
|
|
postCreate: function(){
|
|
|
|
this.inherited(arguments);
|
|
this._target = dojo.query(".fisheyeTarget", this.domNode)[0] || this.domNode;
|
|
this._makeAnims();
|
|
|
|
this.connect(this.domNode, "onmouseover", "show");
|
|
this.connect(this.domNode, "onmouseout", "hide");
|
|
this.connect(this._target, "onclick", "onClick");
|
|
|
|
},
|
|
|
|
show: function(){
|
|
// summary:
|
|
// Show this Fisheye item.
|
|
this._runningOut.stop();
|
|
this._runningIn.play();
|
|
},
|
|
|
|
hide: function(){
|
|
// summary:
|
|
// Hide this fisheye item on mouse leave
|
|
this._runningIn.stop();
|
|
this._runningOut.play();
|
|
},
|
|
|
|
_makeAnims: function(){
|
|
// summary:
|
|
// Pre-generate the animations
|
|
|
|
// create two properties: objects, one for each "state"
|
|
var _in = {}, _out = {}, cs = dojo.getComputedStyle(this._target);
|
|
for(var p in this.properties){
|
|
var prop = this.properties[p],
|
|
deep = dojo.isObject(prop),
|
|
v = parseInt(cs[p])
|
|
;
|
|
// note: do not set negative scale for [a list of properties] for IE support
|
|
// note: filter:'s are your own issue, too ;)
|
|
// FIXME: this.unit here is bad, likely. d._toPixelValue ?
|
|
_out[p] = { end: v, unit:this.unit };
|
|
_in[p] = deep ? prop : { end: prop * v, unit:this.unit };
|
|
}
|
|
|
|
this._runningIn = dojo.animateProperty({
|
|
node: this._target,
|
|
easing: this.easeIn,
|
|
duration: this.durationIn,
|
|
properties: _in
|
|
});
|
|
|
|
this._runningOut = dojo.animateProperty({
|
|
node: this._target,
|
|
duration: this.durationOut,
|
|
easing: this.easeOut,
|
|
properties: _out
|
|
});
|
|
|
|
this.connect(this._runningIn, "onEnd", dojo.hitch(this, "onSelected", this));
|
|
},
|
|
|
|
onClick: function(/* Event */e){
|
|
// summary: stub function fired when target is clicked
|
|
// connect or override to use.
|
|
},
|
|
|
|
onSelected: function(/* Object */e){
|
|
// summary: stub function fired when Fisheye Item is fully visible and
|
|
// hovered. connect or override use.
|
|
}
|
|
|
|
});
|