2016-10-13 00:16:48 点击量:22 标签: 收藏本文
在引用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事件了。
我们是一家提供综合软件外包与弱电工程服务的技术公司。
业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。
公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室