问题:在Firefox和Chrome下无法通过鼠标滚轮对地图进行缩放
原因:为了避免弹窗div被flash遮挡,wmode必须设置为transparent模式,但是这种模式xiaFirefox和chrome浏览器的鼠标滚轮事件无法触发
解决方案:通过javascript将鼠标滚轮事件传入到flash中,触发flash的地图事件
swfobject.embedSWF("***.swf", divDom.id, "100%", "100%", "10.0.0", "***.swf", flashvars, flashParams, attributes, function(e){
if(e.success == true){
this.mapObject = e.ref;
/** 判断浏览器类型,以便于让地图支持鼠标滚轮缩放事件
* 目前只完成firefox和chrome支持,IE不需要,其他浏览器暂无测试
**/
if (Ext.isGecko && window.addEventListener) {
/** Mozilla的基于DOM的滚轮事件 * */
window.addEventListener('DOMMouseScroll', onWheelAction.createDelegate(e.ref), false);
}else if(Ext.isChrome){
window.onmousewheel = onWheelAction.createDelegate(e.ref);
}
}
}
.createDelegate(this));
// 鼠标滚轮事件句柄
onWheelAction : function(event) {
var eventObj = {
bubbles : event.bubbles,
buttonDown : event.buttonDown,
cancelable : event.cancelable,
altKey : event.altKey,
ctrlKey : event.ctrlKey,
localX : event.clientX,
localY : event.clientY,
shiftKey : event.shiftKey
};
if (Ext.isGecko) {
// 兼容Mozilla.In Mozilla, sign of delta is different than in IE.
eventObj.delta = -event.detail;
} else {// IE,Opera,Chrome
eventObj.delta = event.wheelDelta;
}
this.dispatchMouseWheelEventAction(eventObj);
}
/** Flash中的事件处理,as函数
**/
protected function init(event:FlexEvent):void
{
//监听js鼠标滚轮事件,实现plugin形式插件的鼠标滚轮操作
var playType:String = flash.system.Capabilities.playerType;
if(playType=="ActiveX"){//IE 浏览器
}else if(playType=="PlugIn"){
//解决firefox和chrome不能通过鼠标滚轮缩放的问题
ExternalInterface.addCallback("dispatchMouseWheelEventAction",dispatchMouseWheelEvent);
}
}
//将鼠标滚轮事件发送给需要监听的控件
public function dispatchMouseWheelEvent(event:Object):void{
var wheelEvent:MouseEvent = new MouseEvent(MouseEvent.MOUSE_WHEEL,event.bubbles,event.cancelable,event.localX,
event.localY,null,event.ctrlKey,event.altKey,event.shiftKey,event.buttonDown,Number(event.delta));
map.dispatchEvent(wheelEvent);
}