package temple.utils { import flash.display.Stage; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; /** * This class prevends the mouse-wheel scrolling the page in the browser if the page is larger than the browsers window. * * Just call * * MouseWheelBlocker.init(this.stage); * * In the document class * * @author Thijs Broerse */ public class MouseWheelBlocker { private static var _initialized:Boolean; private static var _stage:Stage; private static var _textfield:TextField; private static var _enabled:Boolean; public static function init(stage:Stage):void { if(stage == null) throw new Error("stage can not be null"); if(MouseWheelBlocker._initialized) return; MouseWheelBlocker._stage = stage; MouseWheelBlocker._textfield = new TextField(); MouseWheelBlocker._textfield.width = MouseWheelBlocker._textfield.height = 100; MouseWheelBlocker._textfield.visible = false; MouseWheelBlocker._textfield.alpha = 0; MouseWheelBlocker._textfield.text = ""; // add lots of new lines into the textfield for(var i:int = 0; i<100; i++) { MouseWheelBlocker._textfield.appendText("\n"); } MouseWheelBlocker._textfield.addEventListener(Event.SCROLL, MouseWheelBlocker.handleScroll); MouseWheelBlocker._stage.addChild(MouseWheelBlocker._textfield); MouseWheelBlocker.enable(); } public static function get enabled():Boolean { return MouseWheelBlocker._enabled; } public static function set enabled(value:Boolean):void { if(value) { MouseWheelBlocker.enable(); } else { MouseWheelBlocker.disable(); } } public static function enable():void { if(!MouseWheelBlocker._enabled) { MouseWheelBlocker._stage.addEventListener(MouseEvent.MOUSE_WHEEL, MouseWheelBlocker.handleMouseWheel); MouseWheelBlocker._stage.addEventListener(MouseEvent.MOUSE_MOVE, MouseWheelBlocker.handleMouseMove); MouseWheelBlocker._enabled = true; } } public static function disable():void { if(MouseWheelBlocker._enabled) { MouseWheelBlocker._stage.removeEventListener(MouseEvent.MOUSE_WHEEL, MouseWheelBlocker.handleMouseWheel); MouseWheelBlocker._stage.removeEventListener(MouseEvent.MOUSE_MOVE, MouseWheelBlocker.handleMouseMove); MouseWheelBlocker._enabled = false; } } private static function handleMouseWheel(event:MouseEvent):void { MouseWheelBlocker._textfield.x = MouseWheelBlocker._stage.mouseX- MouseWheelBlocker._textfield.width * .5; MouseWheelBlocker._textfield.y = MouseWheelBlocker._stage.mouseY- MouseWheelBlocker._textfield.height * .5; MouseWheelBlocker._textfield.visible = true; new FrameDelay(MouseWheelBlocker.hide); } private static function handleMouseMove(event:MouseEvent):void { MouseWheelBlocker._textfield.x = MouseWheelBlocker._stage.mouseX- MouseWheelBlocker._textfield.width * .5; MouseWheelBlocker._textfield.y = MouseWheelBlocker._stage.mouseY- MouseWheelBlocker._textfield.height * .5; } private static function hide():void { MouseWheelBlocker._textfield.visible = false; } private static function handleScroll(event:Event):void { MouseWheelBlocker._textfield.scrollV = MouseWheelBlocker._textfield.maxScrollV * .5; } } }