67 lines
2.2 KiB
JavaScript
67 lines
2.2 KiB
JavaScript
|
if(!dojo._hasResource["dojo.dnd.TimedMoveable"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
|
||
|
dojo._hasResource["dojo.dnd.TimedMoveable"] = true;
|
||
|
dojo.provide("dojo.dnd.TimedMoveable");
|
||
|
|
||
|
dojo.require("dojo.dnd.Moveable");
|
||
|
|
||
|
(function(){
|
||
|
// precalculate long expressions
|
||
|
var oldOnMove = dojo.dnd.Moveable.prototype.onMove;
|
||
|
|
||
|
dojo.declare("dojo.dnd.TimedMoveable", dojo.dnd.Moveable, {
|
||
|
// summary:
|
||
|
// A specialized version of Moveable to support an FPS throttling.
|
||
|
// This class puts an upper restriction on FPS, which may reduce
|
||
|
// the CPU load. The additional parameter "timeout" regulates
|
||
|
// the delay before actually moving the moveable object.
|
||
|
|
||
|
// object attributes (for markup)
|
||
|
timeout: 40, // in ms, 40ms corresponds to 25 fps
|
||
|
|
||
|
constructor: function(node, params){
|
||
|
// summary: an object, which makes a node moveable with a timer
|
||
|
// node: Node: a node (or node's id) to be moved
|
||
|
// params: Object: an optional object with additional parameters.
|
||
|
// See dojo.dnd.Moveable for details on general parameters.
|
||
|
// Following parameters are specific for this class:
|
||
|
// timeout: Number: delay move by this number of ms
|
||
|
// accumulating position changes during the timeout
|
||
|
|
||
|
// sanitize parameters
|
||
|
if(!params){ params = {}; }
|
||
|
if(params.timeout && typeof params.timeout == "number" && params.timeout >= 0){
|
||
|
this.timeout = params.timeout;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
// markup methods
|
||
|
markupFactory: function(params, node){
|
||
|
return new dojo.dnd.TimedMoveable(node, params);
|
||
|
},
|
||
|
|
||
|
onMoveStop: function(/* dojo.dnd.Mover */ mover){
|
||
|
if(mover._timer){
|
||
|
// stop timer
|
||
|
clearTimeout(mover._timer)
|
||
|
// reflect the last received position
|
||
|
oldOnMove.call(this, mover, mover._leftTop)
|
||
|
}
|
||
|
dojo.dnd.Moveable.prototype.onMoveStop.apply(this, arguments);
|
||
|
},
|
||
|
onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
|
||
|
mover._leftTop = leftTop;
|
||
|
if(!mover._timer){
|
||
|
var _t = this; // to avoid using dojo.hitch()
|
||
|
mover._timer = setTimeout(function(){
|
||
|
// we don't have any pending requests
|
||
|
mover._timer = null;
|
||
|
// reflect the last received position
|
||
|
oldOnMove.call(_t, mover, mover._leftTop);
|
||
|
}, this.timeout);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
})();
|
||
|
|
||
|
}
|