2011-03-30 20 views
6

Estoy tratando de manejar el evento mouseWheel en un advancedDataGrid sin éxito. Sin ningún código adicional, mi adg se puede desplazar con el mouse en IE pero no en Firefox y Chrome, ¿por qué? ¿Por qué se comporta diferente en esos navegadores?MouseWheel en Chrome y Firefox

Luego probé el código pero no funciona:

protected function adgMouseWheelHandler(event:MouseEvent):void 
{ 
    event.delta = event.delta > 0 ? 1 : -1; 
} 

, y luego poner la rueda del ratón evento en mi ADG así:

<mx:AdvancedDataGrid id="myADG" width="100%" height="100%" color="0x323232" 
        dataProvider="{_currentDatosBusqueda}" verticalScrollPolicy="auto" 
        fontSize="11" fontFamily="Arial" fontStyle="normal" 
        fontWeight="normal" doubleClickEnabled="true" 
        itemDoubleClick="dobleClickFilaDataGridBusqueda(event);" 
        useRollOver="true" mouseWheel="adgMouseWheelHandler(event);" 
     > 

¿Alguna idea?

Gracias!

Respuesta

7

Arregle MouseWheel en una aplicación Flex cuando wmode = "opaque" (en realidad funciona en IE, simplemente no Firefox o Chrome, probablemente tampoco Safari u Opera). Esto también corrige las diferentes velocidades de desplazamiento MouseWheel entre Firefox y todo lo demás.

Agregue este JavaScript a su envoltorio: .

 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); 
     } 

y soltar esta clase de apoyo en su archivo MXML principal (Declaraciones para 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); 
     } 
    } 
} 
} 

Ejemplo de JavaScript :.

<script type="text/javascript"> 
     // For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. 
     var swfVersionStr = "10.1.0"; 
     // To use express install, set to playerProductInstall.swf, otherwise the empty string. 
     var xiSwfUrlStr = "playerProductInstall.swf"; 
     var flashvars = {}; 
     var params = {}; 
     params.quality = "high"; 
     params.bgcolor = "#ffffff"; 
     params.allowscriptaccess = "sameDomain"; 
     params.allowfullscreen = "true"; 
      params.wmode = "opaque"; 
     var attributes = {}; 
     attributes.id = "YOURAPP"; 
     attributes.name = "YOURAPP"; 
     attributes.align = "middle"; 

      if(window.addEventListener) { 
       var eventType = (navigator.userAgent.indexOf('Firefox') !=-1) ? "DOMMouseScroll" : "mousewheel";    
       window.addEventListener(eventType, handleWheel, false); 
      } 

      function handleWheel(event) { 
       var app = document.getElementById("YOURAPP"); 
       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); 
      } 

     swfobject.embedSWF(
      "YOURAPP.swf", "flashContent", 
      "100%", "100%", 
      swfVersionStr, xiSwfUrlStr, 
      flashvars, params, attributes); 
     // JavaScript enabled so display the flashContent div in case it is not replaced with a swf object. 
     swfobject.createCSS("#flashContent", "display:block;text-align:left;"); 

    </script> 
+0

Gracias por su respuesta. Primero comencé a sacar el param wmode (era opaco por defecto) y funciona bien en IE, Chrome y FF, pero leí que si no pones nada se configura como "ventana" y solo se recomienda en win2. Me gustaría usar mi aplicación en dispositivos móviles (con Android), ¿será un problema? Luego intenté con lo que dijiste, pero no sé nada sobre javascript, así que puse ese código en mi history.js y en la index-template (y el otro código en mi main.mxml) sin éxito ... ¿podrías explicarme un poco más? ? – alicia

+0

¿Está utilizando Flash Builder para generar su envoltorio HTML? –

+0

Sí, utilizo Flash Builder – alicia

0

Esto es también lo mismo con 'embed', 'transparente', Quite la línea de la sección de JavaScript del HTML incrustado si se ha generado por Flash .. y todo está bien en el mundo de firefox 40.0

Cuestiones relacionadas