/* JesseGraupmann. MOUSE HOVER CLASS ---------------------------------------------------------- hoverControl = setHoverObject ( target , hoverTime ) _hoverObject = {} .target = MC TO CHECK ._hoverTime = HOW LONG HOVER NEEDS TO BE ._isHovering= Boolean ._locked hoverStart() hoverCheck() hoverClear() */ //http://www.flashguru.co.uk/flash-8-settimeout/ //setTimeOut functions - need to use _global['setTimeout'] because undocumented and not in intrinsic class //http://www.macromedia.com/devnet/flash/articles/creating_events.html import mx.events.EventDispatcher class MouseHover extends Object { function dispatchEvent() {}; function addEventListener() {}; function removeEventListener() {}; // set level of broadcast | if true; start,end,onidle will all be dispatched var dispatchAllEvents:Boolean = false; var _locked:Boolean = false; // mc to watch var o:MouseHover; var target:MovieClip; // hover var _isHovering:Boolean = true; var _hoverTimeStart:Number; // when hover starts var _hoverTime:Number = new Number(); // length to wait var _hoverTimer:Number = new Number(); // callBack interval function MouseHover( $target:MovieClip, $_hoverTime:Number ) { trace("MouseHover " + $target + " | " + $_hoverTime); o = this; target = $target; _hoverTime = $_hoverTime; // make this able to broadcast mx.events.EventDispatcher.initialize(this); // listen to mouse movements // Mouse.addListener( this ); // define event listeners init( $target, $_hoverTime ); } // LOCK / UNLOCK function lockCheck () { _locked = true; // lock from future checks } function unlockCheck () { _locked = false; // allow checks } // START function hoverStart ( hover_obj, _hoverTime ) { _global['clearTimeout']( _hoverTimer ); // clear hover check this._isHovering = true; // start hover _isHovering = true; // start hover _hoverTimeStart = getTimer(); // set hover start _hoverTimer = _global['setTimeout']( hover_obj.hoverCheck , _hoverTime , this , hover_obj ); // set hover callback } // CHECK function hoverCheck ( mc , hover_obj) { if( mc._isHovering && !mc.hover_obj._locked) // if callback mc is still being hovered & not locked { // broadcast event hover_obj.dispatchEvent({ target:hover_obj, type:'onHover', hover_obj:hover_obj, mc:mc }); } } // CLEAR function hoverClear ( hover_obj ) { // hover Object hover_obj._isHovering = false; _global['clearTimeout']( hover_obj._hoverTimer ); // clear hover check // target _isHovering = false; _global['clearTimeout']( _hoverTimer ); // clear hover check // broadcast event hover_obj.dispatchEvent({ target:hover_obj, type:'hoverLoss', hover_obj:hover_obj}); } // INITIALIZATION function init ( mc:MovieClip, _hoverTime:Number ) { // add; hoverStart() & hoverEnd() to onRollOver() and onRollOut() to activate hover // onHover(), and onHoverLoss() are broadcasted events to subscribed mcs. You need to subscribe each event. mc.hover_obj = this; // origin of hover functions mc.hoverStart = function() // attach start functions to target { // call hover start this.hover_obj.hoverStart.call( this, this.hover_obj, _hoverTime); } mc.hoverEnd = function() // attach clear events to target { // call hover clear this.hover_obj.hoverClear.call( this, this.hover_obj); } } } // end class