删除 youtube 嵌入的黑色边框

Posted

技术标签:

【中文标题】删除 youtube 嵌入的黑色边框【英文标题】:Remove black borders for a youtube embed 【发布时间】:2015-07-09 22:51:32 【问题描述】:

我正在尝试在我的网站背景中嵌入一个 youtube 视频。我有这个工作并且它是响应式的,除了当我的嵌入视频是宽屏 (16:9) 但我的视口是正方形 (1:1) 时,它会创建黑色边框以补偿剩余空间。

我想知道是否有裁剪视频的选项,以便视频的“中心”始终位于屏幕中,就像上面的示例图片一样。剩下的部分将被切断。我认为图像的 CSS 等效项是 background-size: cover;

这是我目前拥有的代码。尝试使您的视口为正方形,您将看到黑色边框。它也可以通过jsfiddle 获得。

<html>
<head>
    <style>
        body,html margin:0; padding:0; height:100%;

        div.bg_utube 
            position: fixed;
            z-index: -99999;
            -webkit-user-select: none;
            user-select: none;
            width: 100%;
            height: 100%;
        
        #player
            position: absolute;
            top: 0px;
            left: 0px;
            width: 100%;
            height: 100%;
        
    </style>
</head>

<body>
<div class="bg_utube">
    <div id="player"></div>
    <script>
        var tag = document.createElement('script');
        tag.src = "http://www.youtube.com/player_api";
        var firstScriptTag = document.getElementsByTagName('script')[0];
        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

        var player;
        var video_id = 'JQ7a_8psCn0';

        function onYouTubePlayerAPIReady() 
            player = new YT.Player('player', 
                height: '390',
                width: '640',
                videoId: video_id,
                playerVars: 
                    'autoplay': 1,
                    'controls': 0,
                    'html5': 1,
                    'modestbranding': 1,
                    'showinfo': 0,
                    'related': 0,

                events: 
                    'onReady': onPlayerReady,
                    'onStateChange': onPlayerStateChange
                
            );
        

        function onPlayerReady(event) 
            event.target.playVideo();
            player.mute();
            event.target.setPlaybackQuality('hd720');
        

        function onPlayerStateChange(event) 

            if (event.data == YT.PlayerState.PLAYING ) 

            

            if(event.data === YT.PlayerState.ENDED)
                player.loadVideoById(video_id);
            
        
    </script>
</div>
</body>
</html>

我确实在谷歌上搜索过解决方案,但找不到任何解决方案。许多是专门为 &lt;object&gt;&lt;embed&gt; 使用的,使用旧的 youtube 嵌入样式。我正在使用 YouTube API 来呈现 HTML5 播放器。

有人能给我一个正确的方向吗?

【问题讨论】:

你可以使用 我认为我无法控制 YouTube API 以何种方式为我的视频生成代码。目前它将成为一个 iframe。此外,&lt;video&gt; 标签用于加载支持格式的视频(可能因浏览器而异)。 YouTube 嵌入链接不仅仅是视频,它们是包含逻辑的网页,用于检测用户支持的内容以及他们如何使用 HTML5、flash 或其他插件播放 youtube 视频。我使用它是因为我想支持尽可能多的设备。因此,我不认为&lt;video&gt; 是一个选项。 标准的 youtube 嵌入确实支持更多,因为 @user1129884 我实际上只关心 Firefox / Safari / Chrome / android(默认浏览器?)/和 iPhone(Safari/Chrome)。它们都会是 HTML5 吗? 如果您打算使用&lt;video&gt; 标签作为替代,请注意并非所有浏览器都支持所有视频格式。 H.264 似乎得到了最多的支持,但它作为一种免费格式的状态并不确定:en.wikipedia.org/wiki/HTML5_video#Browser_support 【参考方案1】:

播放器创建 iframe,视频通过 youtube 在其中播放 这代表了一个问题,因为您无法更改跨域中对象的参数。 包含视频的对象在player.c.contentWindow.querySelector(".video-stream.html5-main-video")

我现在唯一的解决方案是用这样的 css 转换容器 .bg_utube

div.bg_utube 
        position: fixed;
        z-index: -99999;
        -webkit-user-select: none;
        user-select: none;
        width: 100%;
        height: 100%;
        -ms-transform: scale(2,3);
      -webkit-transform: scale(2,3);
      transform: scale(2,3);
    

【讨论】:

感谢您的解决方案。这显然不是最好的解决方案,但在我有更好的解决方案之前,它现在可以解决。

以上是关于删除 youtube 嵌入的黑色边框的主要内容,如果未能解决你的问题,请参考以下文章

为嵌入的 YouTube 视频添加边框半径

如何摆脱嵌入在 UIWebView 中的 youtube 视频周围的白色边框?

更改 YouTube 视频嵌入的背景颜色

嵌入没有任何徽标或 youtube 链接的 youtube 视频

html 嵌入Youtube视频并删除标题栏和Youtube徽标

Youtube 嵌入视频 - 删除最终信息屏幕