MouseWheel in Chrome and Firefox

前端 未结 2 1540
遥遥无期
遥遥无期 2020-12-15 01:36

I\'m trying to handle the mouseWheel event in an advancedDataGrid with not success. Without any additional code my adg can be scrolled with the mouse in IE but not in firefo

2条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-15 02:16

    Fix for no MouseWheel in a Flex app when wmode="opaque" (it actually works in IE, just not Firefox or Chrome, probably not Safari or Opera either). This also fixes the different MouseWheel scroller rates between Firefox and everything else.

    Add this JavaScript to your wrapper: .

            if(window.addEventListener) {
                var eventType = (navigator.userAgent.indexOf('Firefox') !=-1) ? "DOMMouseScroll" : "mousewheel";            
                window.addEventListener(eventType, handleWheel, false);
            }
    
            function handleWheel(event) {
                var app = document.getElementById("YOUR_APPLICATION");
                var edelta = (navigator.userAgent.indexOf('Firefox') !=-1) ? -event.detail : event.wheelDelta/40;                                   
                var o = {x: event.screenX, y: event.screenY, 
                    delta: edelta,
                    ctrlKey: event.ctrlKey, altKey: event.altKey, 
                    shiftKey: event.shiftKey}
    
                app.handleWheel(o);
            }
    

    And drop this support class into your main MXML file (Declarations for Flex4): .

    package {
    import flash.display.InteractiveObject;
    import flash.display.Shape;
    import flash.display.Stage;
    import flash.events.MouseEvent;
    import flash.external.ExternalInterface;
    import flash.geom.Point;
    
    import mx.core.FlexGlobals;
    import mx.core.UIComponent;
    import mx.events.FlexEvent;
    
    public class MouseWheelSupport {
    
        //--------------------------------------
        //   Constructor 
        //--------------------------------------
    
        public function MouseWheelSupport() {
            FlexGlobals.topLevelApplication.addEventListener(FlexEvent.APPLICATION_COMPLETE, attachMouseWheelHandler);
        }
    
        //------------------------------------------------------------------------------
        //
        //   Functions  
        //
        //------------------------------------------------------------------------------
    
        //--------------------------------------
        //   Private 
        //--------------------------------------
    
        private function attachMouseWheelHandler(event : FlexEvent) : void {
            ExternalInterface.addCallback("handleWheel", handleWheel);
        }
    
        private function handleWheel(event : Object) : void {
            var obj : InteractiveObject = null;
            var applicationStage : Stage = FlexGlobals.topLevelApplication.stage as Stage;
    
            var mousePoint : Point = new Point(applicationStage.mouseX, applicationStage.mouseY);
            var objects : Array = applicationStage.getObjectsUnderPoint(mousePoint);
    
            for (var i : int = objects.length - 1; i >= 0; i--) {
                if (objects[i] is InteractiveObject) {
                    obj = objects[i] as InteractiveObject;
                    break;
                }
                else {
                    if (objects[i] is Shape && (objects[i] as Shape).parent) {
                        obj = (objects[i] as Shape).parent;
                        break;
                    }
                }
            }
    
            if (obj) {
                var mEvent : MouseEvent = new MouseEvent(MouseEvent.MOUSE_WHEEL, true, false,
                                                         mousePoint.x, mousePoint.y, obj,
                                                         event.ctrlKey, event.altKey, event.shiftKey,
                                                         false, Number(event.delta));
                obj.dispatchEvent(mEvent);
            }
        }
    }
    }
    

    JavaScript example:.

     
    

提交回复
热议问题