·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]Flash控件的mouseWheel事件失效问题的解决办法

时间:2013-03-03 21:449ria.com
在引用Flex编译后的swf文件时,如果设置wmode为Opaque或Transparent时,在FireFox、Chrome、Safari浏览器中,Flash控件的mouseWheel事件会失效,解决方法如下

在引用Flex编译后的swf文件时,如果设置wmode为Opaque或Transparent时,在FireFox、Chrome、Safari浏览器中,Flash控件的mouseWheel事件会失效,解决方法如下:
在JS中捕获mouseWheel事件,用js调用Flex中响应mouseWheel事件的方法。
----------------------------------------------------------------------
1.Flex中响应mouseWheel事件的方法。
public function mouseWheelHandler(obj:Object):void{
var e:MouseEvent = new MouseEvent(MouseEvent.MOUSE_WHEEL);
e.delta = -(o.delta);
//CuPlayer.com提示:其他的具体的业务方法....
}
//下面这句用来给js提供访问的接口。
ExternalInterface.addCallback("mouseWheelHandler",mouseWheelHandler);
-----------------------------------------------------------------------
2.js端:
1.绑定事件:
function addMouseWheelListener(){
//假如flash对像的id为myFlash,getMyFlash方法是获得Flash对象的方法,具体内容不写了。
var viFlash = getMyFlash("myFlash");
//CuPlayer.com提示:判断浏览器的类型
var ua = navigator.userAgent;
if(ua.indexOf("Firefox") > -1){
        //FireFox浏览器响应mouseWheel的方法。
        viFlash.addEventListener('DOMMouseScroll',mouseWheelFireFox,false);
    }else if(ua.indexOf("MSIE") == -1){
        //Chrome、Safari浏览器响应mouseWheel的方法。
        viFlash.addEventListener('mousewheel',mouseWheelOtherBrowsing,false);
    }
}
2.响应事件的方法。
function mouseWheelFireFox(event)
{
    var viFlash = getMyFlash("myFlash");
    if(viFlash){
        var obj={delta:event.detail}
        //Flex给JS提供的接口
        viFlash .mouseWheelHandler(obj);
    }
}
function mouseWheelOtherBrowsing(event)
{
    var viFlash = getMyFlash("myFlash");
    if(viFlash){
        var obj={delta:-event.detail}
        //Flex给JS提供的接口
        viFlash .mouseWheelHandler(obj);
    }
}
-------------------------------------------------------------------
方法都提供完了。
    还需要说明一下的是方法的执行顺序,首先在页面加载完时要执行addMouseWheelListener方法来绑定事件,当页面有mouseWheel 动作时,不同的浏览器会执行不同的方法(mouseWheelFireFox方法和mouseWheelOtherBrowsing方法),然后再由 mouseWheelFireFox或mouseWheelOtherBrowsing方法调用Flex中的mouseWheelHandler方法。
--------------------------------------------------------------------
    有时候在页面中执行addMouseWheelListener方法时获得的viFlash对象是undifined的,这是因为Falsh还没加载完就 调用的Flash中的方法。这种情况的解决方法是将页面中的addMouseWheelListener移到Flex控件中执行,详细如下:
在Flex的控件加载完成时,调用addMouseWheelListener方法,
比如在Flex的mx:Application标签中,如果有 creationComplete="creationCompleteHandler()",在creationCompleteHandler()方 法的最后添加ExternalInterface.call("addMouseWheelListener");这样就执行了js中的 addMouseWheelListener()方法绑定了事件。页面就可以正常响应mouseWheel事件了。

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器