【问题标题】:youtube's embeded video wont go behind other elementsyoutube 嵌入视频不会落后于其他元素
【发布时间】:2011-10-28 04:32:45
【问题描述】:

我有一个包含 YouTube 嵌入视频的网站,我的问题是,这些视频不遵守 z-index 规则。所有 YouTube 视频都显示在所有其他元素之上。我试过了

$('iframe','.video_container').attr('wmode','opaque');
$('iframe','.video_container').attr('z-index','1');

我发现必须将 wmmode 更改为 opaque,但这不是针对旧的嵌入式视频吗? 我如何为旧的嵌入式样式视频和新的 iframe 实现这一点??

编辑: 即使这也不适用于旧的嵌入式视频

$('object','.video_container').append('<param name="wmode" value="opaque"></param>').find("embed").attr('wmode', 'opaque');

这适用于 iframe 视频

var src=$('iframe','.video_container').attr('src');
 if(src.indexOf('?')==-1)
 {
  src=src+'?wmode=transparent';
 }
 else
 {
  src=src+'&wmode=transparent';
 }
 $('iframe','.video_container').attr('src',src);

但我仍然没有找到旧嵌入视频的方法 这是使用不起作用的js操作后的结果代码

<object width="320" height="240">
<param name="movie" value="http://www.youtube.com/v/-SNytfkJD4U?version=3&hl=en_US&rel=0"/>
<param name="allowFullScreen" value="true"/>
<param name="allowscriptaccess" value="always"/>
<embed src="http://www.youtube.com/v/-SNytfkJD4U?version=3&hl=en_US&rel=0" type="application/x-shockwave-flash" width="320" height="240" allowscriptaccess="always" allowfullscreen="true" wmode="opaque"/>
<param name="wmode" value="opaque"/>
</object>

【问题讨论】:

  • 因此,如果您使用了我的答案,您至少可以投票赞成-.-您不是很友善,并且可能会导致人们不再帮助您..
  • 很抱歉,我很担心它的工作。现在做到了...如果您可以使旧的嵌入视频正常工作,那也可以作为完整的答案

标签: javascript jquery html css youtube


【解决方案1】:

像这样改变你的 iframe src

http://www.youtube.com/embed/UUeRCDyVspR2M?wmode=transparent

所以由 google 提供的 flashplayer 将按照你告诉他们的参数呈现:)

您只需将 ?wmode=transparent 添加到参数或这样做

http://www.youtube.com/embed/UUeRCDyVspR2M?param1=bla&param2=foo&and_so_on=more&wmode=transparent

所以你只需要追加

&wmode=transparent

到网址的末尾

【讨论】:

  • 如何在不弄乱 url 的其他 get 参数的情况下做到这一点??
  • 以前的嵌入视频怎么样?另一个答案不起作用
  • 我真的不知道你以前的嵌入视频是什么意思。我想你也需要将它添加到它们中!但实际上我并不完全明白你的意思..
  • 对于像这样的代码&lt;object width="425" height="349"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-SNytfkJD4U?version=3&amp;amp;hl=en_US"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/-SNytfkJD4U?version=3&amp;amp;hl=en_US" type="application/x-shockwave-flash" width="425" height="349" allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;
  • 是的,我在家的时候会发布答案,别担心 - 坚持大约 45 分钟 ;)
【解决方案2】:

您应该在 flash 元素中为 wmode 添加一个参数,这将是您标记中的一个对象标记。尝试找到对象元素并尝试此操作

$('object','.video_container').append(
    $("<param/>").attr({
        'name': 'wmode',
        'value': 'opaque'
    })
).find("embed").attr('wmode', 'opaque');

【讨论】:

  • 它在 iframe 中,不是吗?所以他不能更改源代码在他的域之外的 iframe 中的值;)
  • @sasidhar - 您的 Flash 视频是否在 iframe 中?
  • youtube 提供的新嵌入代码是这样的 iframe &lt;iframe width="425" height="349" src="http://www.youtube.com/embed/-SNytfkJD4U?rel=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
  • 如果你使用的是iframe路由那么这将不起作用,可能你可以尝试http://www.youtube.com/embed/-SNytfkJD4U?rel=0&amp;wmode=opaque作为iframe的来源
  • 你有 +1 @Walialu :)
【解决方案3】:
<script type="text/javascript">
var googleFooYou_tube = function(){
    var objs = document.getElementsByTagName('object');
    var length = objs.length;
    for(var i=0; i<length; i++){
        if(objs[i].className == 'video_container'){
            var param = document.createElement('param');
            param.name='wmode';
            param.value='transparent';
            var origEmbed = objs[i].getElementsByTagName('embed')[0];
            var newEmbed = '<embed wmode="transparent" src="'+origEmbed.src+'" type="application/x-shockwave-flash" width="425" height="349" allowscriptaccess="always" allowfullscreen="true">';
            objs[i].appendChild(param);
            objs[i].removeChild(origEmbed);
            objs[i].innerHTML=objs[i].innerHTML+newEmbed;
        }
    }
}
</script>

和你目前的 html 代码

<object width="425" height="349" class="video_container">
<embed src="http://www.youtube.com/v/-SNytfkJD4U?version=3&amp;hl=en_US" type="application/x-shockwave-flash" width="425" height="349" allowscriptaccess="always" allowfullscreen="true"></embed>
<param name="movie" value="http://www.youtube.com/v/-SNytfkJD4U?version=3&amp;hl=en_US"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
</embed>
</object>
<script>googleFooYou_tube();</script> // added this at the bottom of your page

它不可用...我的意思是功能...但是您可以根据需要对其进行更改...如果您愿意,可以让它看起来更有吸引力。这只是一种快速而肮脏的方法,而且效果很好。

【讨论】:

  • 请纠正我在哪里做错了? jsfiddle.net/sasidhar/fBBuL
  • 到目前为止你做得很好,但据我所知,它不会以这种方式工作..一旦嵌入元素存在并被渲染,只需通过 jquery 更改或添加属性即可完全没有效果 - 这就是为什么我选择构建一个新元素,删除旧元素,然后添加新创建的元素:)
  • 那我该如何重绘一个元素呢?从 dom 中删除它并再次附加它看起来不太好。还有什么办法吗?
  • 实际上我不知道是否有其他方式可以跨浏览器方式工作。如果您感觉更舒服,请从 dom 中删除整个元素,然后插入 youtubes iframe 解决方案 :)
  • 终于............这似乎工作......jsfiddle.net/sasidhar/yXLkt/3非常感谢......
猜你喜欢
  • 2012-06-20
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 2016-04-02
  • 2018-06-08
  • 1970-01-01
相关资源
最近更新 更多