火狐中当wmode设置为trandparent/opaque时Flash不能响应滚轮缩放的问题

当Flash的wmode设置为transparent或opaque时,由于不在页面最上层,导致无法响应滚轮缩放。解决方法包括设置z-index为0或使用ExternalInterface调用AS代码实现缩放事件处理。
部署运行你感兴趣的模型镜像

首先看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);
	}
}

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值