html - YouTube 嵌入的动态高度?

标签 html youtube aspect-ratio

在我的网站上,我有一个静态宽度的嵌入式 chromeless YouTube 播放器 (iframe),可以播放用户选择的视频。它运行良好,但有一个小烦恼:它的高度对视频没有反应;电影级超宽屏视频有水平黑条,老式 4:3 视频有垂直黑条。

是否有一个相当简单的解决方案可以让播放器根据正在播放的视频调整其高度?所有谷歌揭示的都是流体布局网站的脚本(我的不是)。 Javascript、Coffeescript 和 Jquery 解决方案都是可以接受的。

最佳答案

为了实现预期的行为,您需要知道视频的宽高比。使用 YouTube 提供的 API,您可以很容易地做到这一点。首先,要获取 JSON 格式的视频信息,您需要获取以下形式的 URL:

https://gdata.youtube.com/feeds/api/videos/video_id?v=2&prettyprint=true&alt=json

video_id 是您要嵌入的视频的 ID(请注意,“prettyprint”只是使其易于阅读——在实际应用程序中将其删除以节省带宽)。我们关心的属性是entry.media$group.yt$aspectRatio.$t .当视频为 16:9 时,该属性设置为“宽屏”,如果为 4:3,则未定义。因此,您可以轻松检查该值并调整 <iframe> 的大小。相应地。

举个例子:
HTML:

<iframe id = "vid" width="500" src="http://www.youtube.com/embed/ni9RS4pgRXA" frameborder="0" allowfullscreen></iframe>

(这里的宽度是 500 -- 当然,它可以是任何你想要的)。

JavaScript(使用 jQuery,但不是必需的):

$.getJSON("https://gdata.youtube.com/feeds/api/videos/ni9RS4pgRXA?v=2&alt=json",
function(data) {
            var obj = $("#vid");
            var asp = data.entry.media$group.yt$aspectRatio.$t;
            console.log("Aspect Ratio is", asp); //Debugging line. "undefined" if video is 4:3.
            if(asp == "widescreen") {
                obj.height((Math.floor(obj.width() * 9 / 16)));
            }
            else {
                obj.height((Math.floor(obj.width() * 3 / 4)));
            }
        });

在这里 ( link ) 您可以找到一个带有示例 16:9 视频的工作演示。 Javascript 代码非常简单,但如果有任何模糊之处,请告诉我,以便我可以更详细地解释。

关于html - YouTube 嵌入的动态高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11932562/

相关文章:

javascript - 以特定时间间隔检测 div 移动并运行函数 jQuery

html - HTML 元素的默认背景颜色是什么?白色还是透明?

java - 我的第一个应用程序上的错误消息计算了从YouTube视频中学习到的2个值

javascript - youtube iFrame 是空白的

android - 如何为不同宽高比的屏幕尺寸布局按钮

html - 水平引导导航栏垂直显示 - 为什么?

html - 下拉菜单在 Ebay 列表中的任何 IE 中不起作用

php - $ videoFeed = $ yt-> getUserUploads使脚本死亡

javascript - 填充屏幕和滚动时图像的纵横比

c# - 查找并强制执行纵横比