Flash与Ocx控件在页面中的层叠顺序问题

       最近遇到一个比较棘手的问题:把一个Flash遮盖在可视化的Ocx控件上面

 

       问题本身并不算棘手,因为Flash和可视化的Ocx控件在浏览器中都默认属于窗口元素,都用Object标签来嵌入页面。查阅文档得知同级别的对象可以用z-index来对层叠顺序进行控制,但必须对Object对象都设置style=“position:absolute|relative|fixed”。写了一个测试页面,验证可行。

      

        那是不是这个问题就解决了呢?随之而来的问题是这个FLash是一个不规则的带alpha通道的Flash,需求是仅仅绘制可视的部分,要把背景变成透明。

       以前写Flex的时候知道用Flash的wmode属性来设置flash透明,只需要在Object或者Embed标签内加上<param name="wmode" value="transparent" />即可,下班之前天真地告诉同事,设置一个参数就可以了,不曾想结果并不如预期的那样。一旦设置了这个属性,Flash就降级为<div>这个非窗口级别的元素了,自然而然无法盖在窗口级别的ocx控件上。今早查阅wmode相关文档才知道这个“噩耗”。这里引用一下wmode的说明文档:

 

 

++++++++++++Flash wmode property Doc+++++++++++++

 

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”会导致全屏模式失效。

++++++++++++Flash wmode property Doc+++++++++++++

 

     这回算是束手无策了,从Flash这方面下手已经基本被否了,看来只能期盼ocx控件也可以降级为非窗口元素来使用,有了解这方面知识的朋友不吝赐教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值