YouTube iframe API:无法使其响应

时间:2014-04-01 22:45:31

标签: javascript css iframe youtube youtube-api

我试图通过iFrame API实现Youtube视频。我需要捕捉一些事件,因此单独嵌入播放器不是一种选择。

正如文档中所解释的那样,一切都运行正常,我正在调用这样的视频:

var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubeIframeAPIReady() {
if($("#video_1").length){
    player = new YT.Player('video_1', {
        videoId: 'BmsPsdVmkSw',
        playerVars: { 'autoplay': 1, 'controls': 0, 'info': 0, 'rel': 0, 'wmode': 'transparent' },
        events: {
            'onStateChange': goToVS
        }
    });
}

问题在于我需要让视频适应屏幕宽度才能在手机和平​​板电脑上看起来不错,但是在用CSS尝试这样的事情之后:

.video-container { 
    position: relative; 
    padding-bottom: 56.25%; 
    padding-top: 30px; 
    height: 0; 
    overflow: hidden; 
} 
.video-container iframe, .video-container object, .video-container embed { 
    position: absolute; 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 100%;
}

使用JavaScript:http://css-tricks.com/NetMag/FluidWidthVideo/Article-FluidWidthVideo.php

我无法使其发挥作用。在正常的Youtube嵌入代码之前工作正常的任何技巧,但他们没有使用iframe API。

有什么想法吗?

谢谢!

6 个答案:

答案 0 :(得分:13)

我几天前自己做了这项工作,不幸的是项目目前受到保护,或者我会分享这个网址。

如果你包含你正在使用的HTML会有所帮助,因为我怀疑你的问题出在哪里。响应的结束可以是纯CSS;基于javascript / css,它应该是这样的:

<div class=video-container>
    <div id=video_1></div>
</div>

容易遇到的问题是YT.Player用iframe替换命名的div而不是将iframe插入到div中。
另外,在你的YT.Player调用中,我会包含高度/宽度100%的调用,例如

new YT.Player('video_1', {
    videoId: 'BmsPsdVmkSw',
    height: "100%",
    width: "100%"

但鉴于您已经制定了css定义,这可能是不必要的。

祝你好运!

答案 1 :(得分:1)

您可以设置iframe(1280x720)的宽度和高度。 iframe上不能有固定的像素大小。 &#39; .video-container iframe&#39; CSS是设置宽度和高度(100%x 100%,即流体)的原因。

答案 2 :(得分:0)

创建播放器对象后,您可以使用player.setSize()更新播放器大小。

https://developers.google.com/youtube/iframe_api_reference#Playback_controls

答案 3 :(得分:0)

将高度和宽度设置为100% 并使用您的CSS设置响应

&#13;
&#13;
----------------On Html ----------------------

<div id="ytplayer1" class"[your-class-name]">

----------------On CSS ----------------------
.[your-class-name] {width:100%;height:400px;}

@media screen and (max-width: 450px) {
   .[your-class-name] {width:100%;height:180px;}
}

@media screen and (max-width: 768px) {
   .[your-class-name] {width:100%;height:325px;}
}

----------------On Javascript ----------------------
player1 = new YT.Player('ytplayer1', {
          height: '100%',
          width: '100%',
          playerVars: {
          enablejsapi: 1,
          showinfo: '1',
          autoplay: '0'
          },
          events: {
            'onReady': onPlayerReady1
          }
        });
&#13;
&#13;
&#13;

在youtube api中,宽度:100%是有效的,但是高度必须设置为px或其他,所以你需要设置div。

This就是一个例子。

答案 4 :(得分:0)

我通过以下CSS解决了响应问题

.video-container {
    float: none;
    clear: both;
    width: 100%;
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 25px;
    height: 0;
}
.video-container iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

iframe 标签的父级中添加了“ 视频容器”类

答案 5 :(得分:-1)

最后我能搞清楚。我通过JavaScript调整了视频大小,但在readyEvent被解雇后。