2011-03-30 21 views
6

मैं सफलता के साथ एक उन्नतडेटाग्रिड में माउसहेल इवेंट को संभालने की कोशिश कर रहा हूं। किसी भी अतिरिक्त कोड के बिना मेरे विज्ञापन को आईई में माउस के साथ स्क्रॉल किया जा सकता है लेकिन फ़ायरफ़ॉक्स और क्रोम में नहीं, क्यों? यह उन ब्राउज़रों में अलग क्यों व्यवहार करता है?क्रोम और फ़ायरफ़ॉक्स में माउसहेल

तब मैं इस कोड की कोशिश की लेकिन यह काम नहीं करता:

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

और फिर इस तरह मेरे ADG में घटना माउसव्हील की स्थापना:

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

कोई भी विचार?

धन्यवाद!

उत्तर

7

एक फ्लेक्स ऐप में कोई माउसहेल के लिए ठीक करें जब wmode = "opaque" (यह वास्तव में IE में काम करता है, फ़ायरफ़ॉक्स या क्रोम नहीं, शायद सफारी या ओपेरा नहीं)। यह फ़ायरफ़ॉक्स और बाकी सब कुछ के बीच विभिन्न माउसहेल स्क्रोलर दरों को भी ठीक करता है।

इस जावास्क्रिप्ट को अपने रैपर में जोड़ें: ।

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

और अपने मुख्य MXML फ़ाइल में इस समर्थन वर्ग ड्रॉप (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); 
     } 
    } 
} 
} 

जावास्क्रिप्ट उदाहरण:।

<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

आपके उत्तर के लिए धन्यवाद। सबसे पहले मैंने परम wmode (यह डिफ़ॉल्ट रूप से अपारदर्शी था) बाहर लेना शुरू किया और यह आईई, क्रोम और एफएफ में ठीक काम करता है, लेकिन मैंने पढ़ा है कि अगर आप कुछ भी नहीं डालते हैं तो यह "विंडो" के रूप में सेट होता है और इसकी केवल Win2 में अनुशंसा की जाती है। मैं अपने डिवाइस का उपयोग मोबाइल उपकरणों (एंड्रॉइड के साथ) में करना चाहता हूं, तो क्या यह एक समस्या होगी ?? तब मैंने कोशिश की कि आपने जो कहा है, लेकिन मुझे जावास्क्रिप्ट के बारे में कुछ भी पता नहीं है, इसलिए मैंने उस कोड को अपने इतिहास.जेएस और इंडेक्स-टेम्पलेट (और मेरे मुख्य.एमक्सएमएल में अन्य कोड) में सफलता के साथ नहीं रखा .. क्या आप मुझे थोड़ा और समझा सकते हैं ? – alicia

+0

क्या आप फ्लैश बिल्डर का उपयोग अपने एचटीएमएल रैपर जनरेटर के लिए कर रहे हैं? –

+0

हां, मैं फ्लैश बिल्डर – alicia

0

इसे 'wmode', 'पारदर्शी' के साथ एक ही है, .. एम्बेडेड html के जावास्क्रिप्ट अनुभाग से अपमानजनक लाइन को दूर करता है, तो यह फ्लैश करने से उत्पन्न हुआ है और सब कुछ की दुनिया में अच्छा है फ़ायरफ़ॉक्स 40.0

संबंधित मुद्दे