当前位置: 首页 > 面试题库 >

模拟背景大小:覆盖 要么

鲁财
2023-03-14
问题内容

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

我希望它像

background-size: cover;
background-position: center center;

问题答案:

这是我的方法。一个有效的示例在此jsFiddle中。

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>");

};


#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;

}


<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>


 类似资料:
  • 问题内容: 我有一个。当用户悬停div时,我想用rgba颜色()覆盖背景图像。 我想知道是否有一个一格解决方案(即没有多个div,一个用于图像,一个用于颜色,等等)。 我尝试了多种方法: 而这个CSS: 我看到的唯一选择是制作另一个具有覆盖层的图像,使用JavaScript预加载然后使用。但是,我想要一个仅CSS的解决方案(更整洁;更少的HTTP请求;更少的硬盘)。有没有? 问题答案: Peter

  • 问题内容: 我正在像这样在画布上绘制图像: 事实是图片越来越张紧,我不想要这个。如何模拟CSS属性 在cavas中绘制图像时。 查看(我目前拥有的)和(我的目标)之间的区别。 问题答案: 获得封面功能有点复杂,尽管这里有一个解决方案: 更新了 以解决特殊情况。另请参阅下面的@Yousef评论。 现在您可以这样称呼它: 它将按比例缩放图像以适合该容器的内部。 使用最后两个参数偏移图像: 希望这可以帮

  • 我正在构建一个聊天应用程序,当我向用户发送一个图像时,图像并没有覆盖我给出的背景,而是给出了顶部和底部的有线填充。如何解决这个问题。我给出的填充是每边7dp,这里是我的代码

  • 问题内容: 我正在尝试将背景图像设置为延伸到的宽度和高度的整个范围。该会是可变大小的,所以我用 我无法弄清楚如何将其放在这种简写形式中并使之起作用。如果我独立列出每个属性,则可以正常工作,但是我希望有一个多合一的解决方案。 这可行,但不是首选: 问题答案: 根据W3和MDN,需要使用斜线将背景大小与背景位置分开: W3C示例: MDN: 必须在背景位置之后指定此属性,并用’/’字符分隔。

  • 问题内容: 我是django的新人。 我想创建一个自定义窗口小部件。 forms.py: widget.py: project / widgets / filter.html: 但是它不会呈现新模板,而是仍然呈现旧方法。 你能给我一些提示吗? 问题答案: Django版本 <1.11: 小部件必须实现该方法才能呈现不同的模板: Django 1.11版: 在渲染器的文档中,我们可以找到以下内容:

  • 英特尔手册(第2卷第2.2.1.6段)说: 使用地址大小前缀不会禁用RIP相对寻址。地址大小前缀的作用是截断并零扩展计算出的有效地址到32位。 描述如下: 调用near,velegrate,displement相对于下64位模式下32位位移符号扩展到64位