首先看wmode的参数说明:
window 模式
默认情况下的显示模式,在这种模式下flash player有自己的窗口句柄,这就意味着flash影片是存在于Windows中的一个显示实例,并且是在浏览器核心显示窗口之上的,所以flash只是貌似显示在浏览器中,但这也是flash最快最有效率的渲染模式。由于他是独立于浏览器的HTML渲染表面,这就导致默认显示方式下flash总是会遮住位置与他重合的所有DHTML层。 但是大多数苹果电脑浏览器会允许DHTML层显示在flash之上,但当flash影片播放时会出现比较诡异的现象,比如DHTML层像被flash刮掉一块一样显示异常。
Opaque 模式
这是一种无窗口模式,在这种情况下flash player没有自己的窗口句柄,这就需要浏览器需要告诉flash player在浏览器的渲染表面绘制的时间和位置。这时flash影片就不会在高于浏览器HTML渲染表面而是与其他元素一样在同一个页面上,因此你就可以使用z-index值来控制DHTML元素是遮盖flash或者被遮盖。
Transparent 模式
透明模式,在这种模式下flash player会将stage的背景色alpha值将为0并且只会绘制stage上真实可见的对象,同样你也可以使用z-index来控制flash影片的深度值,但是与Opaque模式不同的是这样做会降低flash影片的回放效果,而且在9.0.115之前的flash player版本设置wmode=”opaque”或”transparent”会导致全屏模式失效。
有上述描述可见,当设置wmode为opaque和transparent时,且不设置z-index = 0时,flash并不为整个页面的最上层,所以响应不到页面的滚轮缩放事件。
这里解决方法有两种:
1、在嵌入swf文件处,设置z-inde = 0;
2、通过ExterInterface来在JS中调用as代码中响应放大缩小的方法:
(1)AS代码为:
public function onInit():void
{
cs1.width *= 0.8;
cs1.height *= 0.8;
setComponentCenter();
initWidth = cs1.width;
initHeight = cs1.height;
gp1.addEventListener(MouseEvent.MOUSE_WHEEL,onWheelZoom);
gp1.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
ExternalInterface.addCallback("jsWhellZoom", jsWhellZoom);
}
//和JS交互
public function jsWhellZoom(o:Object):void
{
var e:MouseEvent = new MouseEvent(MouseEvent.MOUSE_WHEEL);
e.delta = -(o.delta);
onWheelZoom(e);
}
/**
* 缩放过程为先缩放,后移位
*/
public function onWheelZoom(e : MouseEvent):void
{
if(e.delta>2)
{
if(cs1.width/initWidth<2.1)
zoomLevel =1.1;
else
zoomLevel = 1;
}
if(e.delta<-2)
{
if(initWidth/cs1.width<1.5)
zoomLevel =0.9;
else
zoomLevel = 1;
}
cs1.width *= zoomLevel;
cs1.height *= zoomLevel;
setComponentCenter();
}
(2)JS代码为:
//解决火狐中当wmode设置为透明时鼠标滚轮失效的问题
function setMouseWheelValidate(){
var container = getDomObject("marketMapObj");
var isIE= navigator.appName.indexOf("Microsoft") != -1;
if (!isIE){
container.addEventListener('DOMMouseScroll', onWheelZoom,false);
}
}
function onWheelZoom(event){
var app = window.document["qj"];
if (app) {
var o = {x: event.screenX, y: event.screenY,
delta: event.detail,
ctrlKey: event.ctrlKey, altKey: event.altKey,
shiftKey: event.shiftKey}
app.jsWhellZoom(o);
}
}
当Flash的wmode设置为transparent或opaque时,由于不在页面最上层,导致无法响应滚轮缩放。解决方法包括设置z-index为0或使用ExternalInterface调用AS代码实现缩放事件处理。
7134

被折叠的 条评论
为什么被折叠?



