我在div中有一个视频的iframe,如下所示:
<div class="media">
<iframe>
</div>
我在窗口调整大小上动态设置DIV的大小。
我想缩放iframe以使其适合div,同时保持其纵横比。那里的大多数代码都处理缩放图像,这更容易。
这是我到目前为止的内容,但是不起作用:
jQuery.fn.fitToParent = function()
{
this.each(function()
{
var width = jQuery(this).width();
var height = jQuery(this).height();
var parentWidth = jQuery(this).parent().width();
var parentHeight = jQuery(this).parent().height();
if(width < parentWidth)
{
newWidth = parentWidth;
newHeight = newWidth/width*height;
}
else
{
newHeight = parentHeight;
newWidth = newHeight/height*width;
}
jQuery(this).css({
'height' :newHeight,
'width' :newWidth'
});
});
};
基本上,我希望复制“ background-size:contain”在CSS中用于图像的大小,但在DIV中用于iframe。
谢谢您的帮助!
随着时间的推移,我对@TrueBlueAussie的答案有了很大的改进,并认为我会在此处发布更复杂的答案以供将来参考。
在此处将其作为GitHub上的插件:https : //github.com/drewbaker/fitToParent
这是jQuery插件:
jQuery.fn.fitToParent = function (options) {
this.each(function () {
// Cache the resize element
var $el = jQuery(this);
// Get size parent (box to fit element in)
var $box;
if( $el.closest('.size-parent').length ) {
$box = $el.closest('.size-parent');
} else {
$box = $el.parent();
}
// These are the defaults.
var settings = jQuery.extend({
height_offset: 0,
width_offset: 0,
box_height: $box.height(),
box_width: $box.width(),
}, options );
// Setup box and element widths
var width = $el.width();
var height = $el.height();
var parentWidth = settings.box_width - settings.width_offset;
var parentHeight = settings.box_height - settings.height_offset;
// Maintin aspect ratio
var aspect = width / height;
var parentAspect = parentWidth / parentHeight;
// Resize to fit box
if (aspect > parentAspect) {
newWidth = parentWidth;
newHeight = (newWidth / aspect);
} else {
newHeight = parentHeight;
newWidth = newHeight * aspect;
}
// Set new size of element
$el.width(newWidth);
$el.height(newHeight);
});
};
因此,假设您具有以下HTML:
<div id="wrapper">
<iframe width="720" height="405" src="//player.vimeo.com/video/19223989"></iframe>
</div>
调用插件的最基本方法是这样的:
jQuery('#wrapper iframe').fitToParent();
但是我经常将#wrapper设置为接近窗口的高度和宽度,如下所示:
// Get window height and width
var winHeight = jQuery(window).height();
var winWidth = jQuery(window).width();
// Set wrapper height/width to that of window
jQuery('#wrapper').height(winHeight).width(winWidth);
// Size Iframe
jQuery('#wrapper iframe').fitToParent({
height_offset: 100, // Put some space around the video
width_offset: 100, // Put some space around the video
});
您还可以输入自定义的框大小以适合元素,如下所示:
// Get window height and width
var winHeight = jQuery(window).height();
var winWidth = jQuery(window).width();
// Size element
jQuery('#wrapper iframe').fitToParent({
height_offset: 100, // Put some space around the video
width_offset: 100, // Put some space around the video
box_height: winHeight, // Force use of this box size
box_width: winWidth // Force use of this box size
});
我还添加了将CSS类“ size-parent”设置为父元素的功能,然后它将使用该父元素作为框的大小。一个完整的例子:
// HTML like this
<div id="wrapper" class="size-parent">
<div class="media">
<iframe width="720" height="405" src="//player.vimeo.com/video/19223989"></iframe>
</div>
</div>
// jQuery like this
jQuery('.media iframe').fitToParent();
如果不设置.size-parent,它将回退到父元素。如果设置box_height / box_width参数,则这些参数将明显覆盖所有内容。
现在,要显示此功能多么强大,请尝试使用垂直居中,水平居中的宽高比正确的iFrame!
// CSS like this
#wrapper {
text-align: center;
display: table-cell;
vertical-align: middle;
}
#wrapper iframe {
display: inline-block;
}
// HTML like this
<div id="wrapper" class="size-wrapper">
<iframe width="720" height="405" src="//player.vimeo.com/video/19223989"></iframe>
</div>
// jQuery like this
// Get window height and width
var winHeight = jQuery(window).height();
var winWidth = jQuery(window).width();
// Size wrapper
jQuery('#wrapper').height( winHeight ).width( winWidth );
// Size element
jQuery('#wrapper iframe').fitToParent({
height_offset: 200, // Put some space around the video
width_offset: 200, // Put some space around the video
});
// Fit iFrame to wrapper
jQuery('#wrapper iframe').fitToParent();
在现实生活中,我将jQuery包装在一个函数中,然后在窗口调整大小时调用该函数以获得真正的响应式iFrame!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句