[AS3]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事件了。
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例