使用embed标签嵌入wmode解决网页当中flash遮挡页面元素的问题
今天测试了编辑器两种上传视频的方式,却发现最终的页面上视频的显示效果控制器部分不一样。一个视频是我在编辑器里边通过上传视频方式上传的,另一个是我在编辑器用插入视频方式上传的,具体显示如下图:
(上传方式)flash控制器正常显示:
(插入方式)flash控制器显示错乱的情况:
接着我对比了下各自的源代码发现两者生成的标签略有区别:
上传方式生成的源代码:
1 <embed height="280" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="420" src="/viscms/r/cms/flvplayer.swf" srccopy="11" allowfullscreen="true" flashvars="vcastr_file=/web/201601/1.flv&IsAutoPlay=1" quality="high"/>
插入方式生成的源代码:
1 <embed type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="/viscms/r/cms/flvplayer.swf" flashvars="vcastr_file=/web/201601/2.flv&IsAutoPlay=1" wmode="transparent" width="420" height="280" allowscriptaccess="never" allowfullscreen="true"/>
最终发现有一个特殊标签wmode="transparent" 使得两者呈现的结果不一样。
于是乎,我百度了一下wmode这个属性,具体有两个参数:
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”会导致全屏模式失效。
最终结论: "Opaque"和"Transparent"都可与 HTML 层交互,从而允许 SWF 文件上方的层遮蔽应用程序。这两种选项之间的差异在于"Transparent"允许透明,因此,如果 SWF 文件的某一部分是透明的,则 SWF 文件下方的 HTML 层可以透过该部分显示出来,而"opaque"则不会显示。
所以,我将wmode="transparent" 改为wmode="Opaque"后视频显示正常
==========================================路漫漫其修远兮========================================== ====================== 知识改变生活 ====================== ====================== 技术改变命运 ====================== ====================== 我是一名普通的程序员 ====================== ====================== 希望通过自己的努力来使自己人生更加绚烂多彩 ====================== ==========================================吾将上下而求索==========================================