用 javascript + actionScript 解决透明的flash在firefox下滚轮失效的问题!

本文介绍了解决Firefox浏览器中Flash插件滚动条功能失效的方法,通过在宿主HTML文件中添加特定代码,确保鼠标滚轮事件能够正确传递给Flash对象。

在透明的flash在firefox下滚轮功能会失效,只有firefox有此问题,其他浏览器没有碰到过,这是因为firefox没有把鼠标的滚轮事件传给flash的原因。我们可以这样来解决:

1、在flash的宿主文件(HTML)下增加如下代码:

<mce:script language="JavaScript" type="text/javascript"><!-- if(!(document.attachEvent)) { window.addEventListener("DOMMouseScroll", handleWheel, false); } function handleWheel(event) { var app = window.document["${application}"]; if (app) { var o = {x: event.screenX, y: event.screenY, delta: event.detail, ctrlKey: event.ctrlKey, altKey: event.altKey, shiftKey: event.shiftKey} app.handleWheel(o); } } // --></mce:script>

注,${application}为FLEX站点工程下XXX.template的参数,如为其他文件,请改为flash对象的ID值。

2、在flash程序初始化完后,执行此代码:

ExternalInterface.addCallback("handleWheel", handleWheel);

注:可以把这行代码加入初始化完成的事件回调函数中执行,此函数注册来自javascript函数"handleWheel"的事件,回调函数是handleWheel,此函数代码如下:

3、在上面这句代码的函数外,加入此函数:

public function handleWheel(event:Object): void { var obj:InteractiveObject = null; var tmpGlbPoint:Point = new Point(this.mouseX, this.mouseY); var objects:Array = this.getObjectsUnderPoint(tmpGlbPoint); 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 tmpP:Point = obj.globalToLocal(tmpGlbPoint); var mEvent:MouseEvent = new MouseEvent(MouseEvent.MOUSE_WHEEL, true, false, tmpP.x, tmpP.y, obj, event.ctrlKey, event.altKey, event.shiftKey, false, -Number(event.delta)); obj.dispatchEvent(mEvent); } }

OK了,编译完,用firefox打开看看!!可以了吧!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值