javascript - 以正确的纵横比嵌入 Youtube/Vimeo 视频

标签 javascript html css video youtube

所以我有一个视频页面,我在其中嵌入了一个 vimeo 视频。麻烦的是,纵横比经常是错误的,因为我没有设置宽度和高度。给我留下视频上的黑条。我只动态传递 vimeo ID,所以我没有为每个视频设置宽度和高度。

像这样的动态视频 ID:

<iframe src="http://player.vimeo.com/video/<?php echo $videoID; ?>?title=0&amp;byline=0&amp;portrait=0" width="400" height="225" frameborder="0"></iframe>

那么,我的问题是,有没有一种方法可以检测视频的纵横比应该是多少?

我知道有很多插件可以帮助您保持流体宽度的纵横比,例如; - http://fitvidsjs.com/

并且您可以按照 css-tricks 中所述使用 javascript 实现它: - http://css-tricks.com/NetMag/FluidWidthVideo/Article-FluidWidthVideo.php

-- 但这些仅在您设置正确的宽高比以使用宽度和高度属性开始时才有效。

大多数新的 vimeo 视频似乎是 width="400"height="225",但我的网站处理一些不共享此比例的旧视频,因此您会在顶部和底部看到黑色管道视频或侧面。

我试图在每个视频中删除这些黑色管道。

感谢任何建议,

爱甜

最佳答案

获取维度

您可以使用 oEmbed . oEmbed 是一种用于显示嵌入内容的 API。您向服务端点发出 HTTP 请求,例如:

请求示例

http://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=NWHfY_lvKIQ

您会收到包含视频尺寸(以及其他有用信息)的 JSON 响应。

响应示例:

{
    "title": "Learning from StackOverflow.com", 
    "height": 270,
    "author_url": "http:\/\/www.youtube.com\/user\/GoogleTechTalks",
    "author_name": "GoogleTechTalks",
    "provider_name": "YouTube",
    "thumbnail_url": "http:\/\/i.ytimg.com\/vi\/NWHfY_lvKIQ\/hqdefault.jpg",
    "html": "\u003ciframe width=\"480\" height=\"270\" src=\"http:\/\/www.youtube.com\/embed\/NWHfY_lvKIQ?feature=oembed\" frameborder=\"0\" allowfullscreen\u003e\u003c\/iframe\u003e",
    "provider_url": "http:\/\/www.youtube.com\/",
    "thumbnail_width": 480,
    "width": 480,
    "thumbnail_height": 360,
    "version": "1.0",
    "type": "video"
}

您可以在 oEmbed 网站上阅读完整的文档。此 API 提供了一种访问嵌入式内容的标准方式,并且受到许多流行服务的支持,这里只是其中的一部分:

  • YouTube
  • 视频
  • Flickr
  • 葫芦
  • 越轨
  • WordPress
  • 混合云
  • 声云

正确显示视频

oEmbed 为您提供宽度和高度,因此您可以根据需要简单地设置宽度和高度。

如果您的网站是响应式的,那么有一些插件可以帮助您在按照您的建议调整大小时保持纵横比。

但是,我更喜欢纯 CSS 方法。您可以使用 oEmbed 的宽度和高度来执行以下操作:

您可以将嵌入代码包装在包含 div 中,使 iframeobject 100% 宽度和高度,并使用另一个 div 在你的容器里面给容器高度。内部 divpadding-top 为 60%,强制主容器的高度为其宽度的 60%。您只需使用 oEmbed 中的信息计算高度占宽度的百分比,即可计算出要使用多少填充。

示例 HTML

<div class="video">
    <span class="video-height"></span>
    <iframe src="https://www.youtube.com/embed/NWHfY_lvKIQ" frameborder="0">   </iframe>
</div>

示例 CSS

.video {
    width: 50%;
    position: relative;
}

.video > .video-height {
    padding-top: 60%;
    display: block;
}

iframe {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
}

您可以在此处查看工作示例:https://jsfiddle.net/k2eyty4f/3/调整窗口大小以查看高度如何自动调整为宽度的百分比。

关于javascript - 以正确的纵横比嵌入 Youtube/Vimeo 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20415764/

相关文章:

javascript - 如何从另一个原型(prototype)方法中识别 JavaScript 原型(prototype)方法被调用者的名称

javascript - FileReader readAsArrayBuffer() 与本地 mp3 文件

javascript - 在 Javascript 中获取谷歌地图编码多段线的开始和结束坐标

javascript - HTML datetime-local 更改事件?

html - 下拉菜单中 li 元素之间没有空格

javascript - 从右向左切换输入

javascript - 如何检查每个输入属性(如果类型为 radio 并已选中)

javascript - onClick 过渡并切换 div 元素的可见性

jquery - 使用 jQuery 关闭引导警报不适用于此代码?

css - 空和非空内联 block 基线之间的区别