`
joe.feng
  • 浏览: 131534 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

wmode参数详解,对flash以及html元素的影响(转载)

    博客分类:
  • Flex
阅读更多

在页面中经常会用到需要用div来覆盖flash的情况,如梦幻人生项目中有一个游戏场景是全flash的,聊天窗口是普通的div代码,聊天窗口在打开的时候需要盖在flash的上面,如下图:

各浏览器中用iframe覆盖flash的方法,以及不能覆盖的情况 - 艾斯特 - 艾斯特,贴贴的博客

但 是通常情况下用div是盖不住flash的,不管你如何设置这二者的z-index都是不可能的。解决这个问题的关键在于设置放flash的embed或 object 中wmode的属性,wmode的属性有三种值:opaque,transparent 和 window。我们来看看这三种模式的解释:

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

window 模式

默认情况下的显示模式,在这种模式下flash player有自己的窗口句柄,这就意味着flash影片是存在于Windows中的一个显示实例,并且是在浏览器核心显示窗口之上的,所以flash只是貌似 显示在浏览器中,但这也是flash最快最有效率的渲染模式。由于他是独立于浏览器的HTML渲染表面,这就导致默认显示方式下flash总是会遮住位置与他重合的所有DHTML层。

但是大多数苹果电脑浏览器会允许DHTML层显示在flash之上,但当flash影片播放时会出现比较诡异的现象,比如DHTML层像被flash刮掉一块一样显示异常。

 

看了上面的解释,相信你已经有一定了解了。下面我们来应用一下。测试时的浏览器及版本是:ie7/8, ie6, FF3.6+, Safari5.0, Opera10+ 。

注:为了看得更清楚,我把不必要的参数和样式都省略了

例1:wmode="Opaque" 和 wmode="Transparent"

<div id="flash-part" style="position:relative; z-index:1 ;">
<embed wmode="Opaque " src="http://hadaiye.blog.163.com/blog/#" />
</div>
<div id="layer-part" style="position:absolute; z-index:3; ">&nbsp;</div>

wmode为Opaque(不透明),这种设置可以让layer-part 在 flash 之上,在以上的浏览器中测试都能通过,效果如下图:

各浏览器中用iframe覆盖flash的方法,以及不能覆盖的情况 - 艾斯特 - 艾斯特,贴贴的博客

wmode="Opaque" 和 wmode="Transparent" 的效果是一样的,所以就不再赘述。

例2:wmode="window"
<div id="flash-part" style="position:relative; z-index:1 ;">
<embed wmode="window " src="http://hadaiye.blog.163.com/blog/#" />
</div>
<div id="layer-part" style="position:absolute; z-index:3 ;">&nbsp;</div>

将wmode改成window后问题出来了,根据上面的解释,window模式是独立于浏览器窗口之上的,只是看上去在浏览器上而已,z-index已经不起作用了。我测试了一下,除了强大的FF3.6+ ,其它浏览器都正确地显示了flash的位置,layer-part被正确地压在了flash的下面。如下:
各浏览器中用iframe覆盖flash的方法,以及不能覆盖的情况 - 艾斯特 - 艾斯特,贴贴的博客
解决方法: 用一个iframe来盖住flash,同样也是用z-index来定层高。代码如下:
<div id="flash-part" style="position:relative; z-index:1; ">
<embed wmode="window " src="http://hadaiye.blog.163.com/blog/#" />
</div>
<iframe style="position:absolute; z-index:2;></ iframe>
<div id="layer-part" style="position:absolute; z-index:3 ;">&nbsp;</div>
但这个方法也不是在所有的浏览器中都有效,此方法对Safari, Opera无效 。在FF,IE,Chrome下的效果如下图(白色部分是iframe):

各浏览器中用iframe覆盖flash的方法,以及不能覆盖的情况 - 艾斯特 - 艾斯特,贴贴的博客

为 什么iframe可以在部分浏览器中挡住 flash?这个问题我也搜索了一下,找到的解释是这样的,在ie5.5以前,iframe是一个windowed element,也就是说,它也在浏览器上有一个独立的窗口,类似于flash的window模式。在ie5.5之后的版本中iframe虽然被定性为了 windowless element但是似乎它的存在形式并没有完全等同于windowless的元素,某些浏览器对它的显示还是可以当windowed元素使用。

下面我们要介绍一种更变态的运用,把一个window模式的flash放到一个iframe中,再用一个iframe去盖它,看看会发生什么……我们的预期是希望第2个iframe能盖住在第1个iframe中的flash
例3:wmode="window" in iframe
<iframe src="http://hadaiye.blog.163.com/blog/tempflash.html" style="position:absolute; z-index:1;" ></iframe>
<iframe style="position:absolute; z-index:2;"></iframe>
<div id="layer-part" style="position:absolute; z-index:3;">&nbsp;</div>
(tempflash.html 页面中放着一个wmode="window"的flash )
IE,FF下:
各浏览器中用iframe覆盖flash的方法,以及不能覆盖的情况 - 艾斯特 - 艾斯特,贴贴的博客
Chrome,Safari,Opera下(覆没了):
各浏览器中用iframe覆盖flash的方法,以及不能覆盖的情况 - 艾斯特 - 艾斯特,贴贴的博客

这下可以按我们的预期的显示的只剩下ie 和FF了。其它浏览器都让我们失望了,我不知道这”失望的显示“是正确的还是错误的,因为我找不到第1个iframe中的flash与第2个iframe之间正确的关系应该是怎么样的各浏览器中用iframe覆盖flash的方法,以及不能覆盖的情况 - 艾斯特 - 艾斯特,贴贴的博客 。但是我觉得 safari和opera也许是正确的。windowed的元素应该要比windowless 的元素绝对层级更高些吧。

也许有人会问不用wmode="window"模式不就可以了,干麻还要这么麻烦地研究它呢,但是对于需要使用输入法的flash游戏来说只能使用window模式,其它模式都会使输入法失效(变态),所以这其实是我工作中遇到的问题,拿出来和大家分享一下。

分享到:
评论

相关推荐

    html元素遮挡flash详解示例

    复制代码代码如下:wmode参数:transparent模式:可用z-index控制层级opaque模式:可用z-index控制层级window模式:flash层级在浏览器核心显示窗口之上,flash会盖住与他重合的html 情景1(可修改flash的wmode参数)...

    FLASH三维状滚动图片 由模糊到清楚效果.rar

    flashWrite(链接,宽度,高度,ID,背景色,FlashVars,wmode) x_radiusX x_radiusY 图片之间的距离参数 x_centerX x_centerY 整个效果上下边距参数 x_imgWidth x_imgHeight 图片宽度和高度参数 x_Rspeed 滚动速度...

    网页中flash wmode属性你会用吗?

    在做web开发中可能会遇到flash遮挡页面中元素的情况,无论怎么设置flash容器和层的深度(z-index)也无济于事,现有的解决方案是在插入flash的embed或object标签中加入”wmode”属性并设置为wmode=“transparent”或”...

    如何让Flash不遮挡HTML div元素的技巧

    今天在写一个flash广告代码的时候,因为flash自带的链接,容易被当成弹出广告,所以做了一个div层放到flash上面,这样链接都是a触发的不会被拦截,但发现flash一直处于div层上面,原来flash需要加个参数才可以。...

    插入多媒体元素的方法.doc

    多媒体:Multimedia 是指文本、图像、声音、动画、视频(Video)等媒体元素的统称 二、有哪些多媒体元素 1、Flash多媒体元素 2、音频 3、视频 三、插入Flash多媒体元素 1 Flash动画 插入的Flash动画文件,扩展名为...

    VB结合Flash实现动态按钮.rar

    VB结合Flash实现动态按钮,当Flash按钮命令为Norksoft Studio时触发,若要让Flash背景透明,请在Flash的 WMode 属性设置为Transparent,ShowMsg = MsgBox("哈!你刚才单击了【点击下载】按钮", 64, "温馨提示") '打开...

    flash-swf格式计算器使用Object控件嵌入html即可使用(文件内有dom)

    flash-swf格式计算器使用Object控件嵌入html即可使用(文件内有dom) &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; &lt;html xmlns=...

    免费下载 解决FLASH有背景色 使FLASH透明不被遮挡

    ( 解决FLASH有背景色 使FLASH透明不被遮挡.txt 概述:我们常遇见FLASH添加后有背景颜色和FLASH总是遮挡着其它效果或漂浮广告等问题?下面我们介绍给大家解决这一问题的方法:使FLASH变透明 如果要用到...

    4屏flash的flash文件及源码(在网站首页切换显示图片)

    部分html代码 &lt;script src="scripts/AC_RunActiveContent.js" type="text/javascript"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; AC_FL_RunContent( 'codebase','...

    Flex 设置WMODE 后滚轮失效解决的示例源码

    源码来自开源项目:flex-wmode-mousewheel-handler-example ,解决flex设置wmode参数后鼠标滚轮失效的问题。(源码环境为 flex sdk 3.2)

    【原创】VB与FLASH的交互

    【原创】VB与FLASH的交互 flash空间的wmode=transparent 可以设置透明 ShockwaveFlash.Menu = False

    Flash插件本地下载

    92. swf = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');//IE已经安装Flash插件 93. if(swf) 94. { 95. LoGo.style.display="none"; 96. Chrome.style.display="block"; 97. } 98. } 99. catch(e)//...

    flashobject.js

    var fo = new FlashObject("flashfile\自作风速.swf", "mymovie", "300", "200px", "7", "#336699"); fo.addParam("quality", "low"); fo.addParam("wmode", "transparent"); fo.addParam("salign", "t"); ...

    flash音乐动画千年白狐

    pluginspage=http://www.macromedia.com/go/getflashplayer src=http://file.edmin.cn/2010/day_110109/20110109_1788337d0cee0c568e62Qqq2iu2LA0qu.swf width=660 height=480 type=application/x-shockwave-flash ...

    html多媒体应用之网页中插入flash动画、插入音乐

    属性:src=url(Flash路径)width=像素/百分比(flash宽度)height=像素/百分比(falsh高度)wmode window 使 flash 自身的矩形窗口来播放opaque 使 flash 隐藏页面上位于它后面transparent 使 flash的 背景透明 ...

    一句js代码显示flash

    function LoadFlash(url,wmode,width,Height) { var flashcode = '...

    网站flash背景音乐源程序可以指定自己的音乐

    &lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="90" height="15" id="music" align=...

    一个可屏蔽FLASH右键和使用FLASH 右键的JS插入FLASH脚本

    格式型如 如&lt;flash id="Mack" name="Mack" src="RightClick.swf" width="560" height="420" Version="10.0.0" param="{wmode:'opaque'}" expsrc="expressInstall.swf" rightclick="rightClick"/&gt; 支持 右键 如需要...

    143种透明Flash打包下载

    143种透明Flash打包奉送。 透明Flash的使用方法: 在插入flash的代码中插入&lt;param name="wmode" value="transparent"&gt;即可实现flash背景透明

Global site tag (gtag.js) - Google Analytics