首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >模拟背景-大小:在<video>或<img>上覆盖

模拟背景-大小:在<video>或<img>上覆盖
EN

Stack Overflow用户
提问于 2012-05-29 18:48:57
回答 13查看 188.6K关注 0票数 180

如何在<video><img>等html元素上模拟background-size:cover的功能

我希望它像这样工作

代码语言:javascript
复制
background-size: cover;
background-position: center center;
EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2012-07-19 19:14:01

这就是我是如何做到的。一个有效的例子是在this jsFiddle中。

代码语言:javascript
复制
var min_w = 300; // minimum video width allowed
var vid_w_orig;  // original video dimensions
var vid_h_orig;

jQuery(function() { // runs after DOM has loaded

  vid_w_orig = parseInt(jQuery('video').attr('width'));
  vid_h_orig = parseInt(jQuery('video').attr('height'));
  $('#debug').append("<p>DOM loaded</p>");

  jQuery(window).resize(function () { resizeToCover(); });
  jQuery(window).trigger('resize');
});

function resizeToCover() {
  // set the video viewport to the window size
  jQuery('#video-viewport').width(jQuery(window).width());
  jQuery('#video-viewport').height(jQuery(window).height());

  // use largest scale factor of horizontal/vertical
  var scale_h = jQuery(window).width() / vid_w_orig;
  var scale_v = jQuery(window).height() / vid_h_orig;
  var scale = scale_h > scale_v ? scale_h : scale_v;

  // don't allow scaled width < minimum video width
  if (scale * vid_w_orig < min_w) {scale = min_w / vid_w_orig;};

  // now scale the video
  jQuery('video').width(scale * vid_w_orig);
  jQuery('video').height(scale * vid_h_orig);
  // and center it by scrolling the video viewport
  jQuery('#video-viewport').scrollLeft((jQuery('video').width() - jQuery(window).width()) / 2);
  jQuery('#video-viewport').scrollTop((jQuery('video').height() - jQuery(window).height()) / 2);

  // debug output
  jQuery('#debug').html("<p>win_w: " + jQuery(window).width() + "</p>");
  jQuery('#debug').append("<p>win_h: " + jQuery(window).height() + "</p>");
  jQuery('#debug').append("<p>viewport_w: " + jQuery('#video-viewport').width() + "</p>");
  jQuery('#debug').append("<p>viewport_h: " + jQuery('#video-viewport').height() + "</p>");
  jQuery('#debug').append("<p>video_w: " + jQuery('video').width() + "</p>");
  jQuery('#debug').append("<p>video_h: " + jQuery('video').height() + "</p>");
  jQuery('#debug').append("<p>vid_w_orig: " + vid_w_orig + "</p>");
  jQuery('#debug').append("<p>vid_h_orig: " + vid_h_orig + "</p>");
  jQuery('#debug').append("<p>scale: " + scale + "</p>");
};
代码语言:javascript
复制
#video-viewport {
  position: absolute;
  top: 0;
  overflow: hidden;
  z-index: -1; /* for accessing the video by click */
}

#debug {
  position: absolute;
  top: 0;
  z-index: 100;
  color: #fff;
  font-size: 12pt;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="video-viewport">
  <video autoplay controls preload width="640" height="360">
    <source src="http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4"type="video/mp4" />
    <source src="http://www.quirksmode.org/html5/videos/big_buck_bunny.webm"type="video/webm" />
    <source src="http://www.quirksmode.org/html5/videos/big_buck_bunny.ogv"type="video/webm" />
  </video>
</div>

<div id="debug"></div>

票数 43
EN

Stack Overflow用户

发布于 2013-03-20 12:28:22

jsFiddle

使用背景覆盖可以很好地处理图像,宽度也是100%。这些对于<video>来说并不是最优的,而且这些答案过于复杂。您不需要jQuery或JavaScript即可完成全宽视频背景。

请记住,我的代码不会完全覆盖一个视频的背景,但它将使视频尽可能大,以保持宽高比,并仍然覆盖整个背景。任何多余的视频都会从页面边缘流失,页面边缘的大小取决于您锚定视频的位置。

答案很简单。

只需使用以下HTML5视频代码,或类似以下内容:(在完整页面中测试)

代码语言:javascript
复制
html, body {
  width: 100%; 
  height:100%; 
  overflow:hidden;
}

#vid{
  position: absolute;
  top: 50%; 
  left: 50%;
  -webkit-transform: translateX(-50%) translateY(-50%);
  transform: translateX(-50%) translateY(-50%);
  min-width: 100%; 
  min-height: 100%; 
  width: auto; 
  height: auto;
  z-index: -1000; 
  overflow: hidden;
}
代码语言:javascript
复制
<video id="vid" video autobuffer autoplay>
  <source id="mp4" src="http://grochtdreis.de/fuer-jsfiddle/video/sintel_trailer-480.mp4" type="video/mp4">
</video>

最小高度和最小宽度将允许视频保持视频的宽高比,该宽高比通常是任何正常浏览器在正常分辨率下的宽高比。任何多余的视频都会从页面的一侧流失。

票数 136
EN

Stack Overflow用户

发布于 2014-08-01 19:00:26

对于某些浏览器,您可以使用

代码语言:javascript
复制
object-fit: cover;

http://caniuse.com/object-fit

票数 132
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10797632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档