使用jQuery按比例调整iframe的大小以适合DIV

德鲁·贝克

我在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

按比例调整表格大小以适合div

来自分类Dev

在Webapp中按比例调整div的大小

来自分类Dev

jQuery-调整图像大小以适合div

来自分类Dev

如何使网站(图像/表格)按比例调整大小以适合屏幕尺寸

来自分类Dev

在Java中使用BorderLayout按比例调整大小

来自分类Dev

使用JQuery,如何执行可调整大小的div以使其适合其子控件?

来自分类Dev

按宽度按比例调整UIImage的大小

来自分类Dev

按宽度按比例调整UIImage的大小

来自分类Dev

调整大小以适合div的图标

来自分类Dev

调整大小以适合div的图标

来自分类Dev

在窗口调整大小时按比例调整div的宽度和高度

来自分类Dev

按比例缩放div以适合视口

来自分类Dev

按比例缩放div以适合视口

来自分类Dev

在Firefox中按比例调整图像大小

来自分类Dev

按比例调整UIImage的大小,然后裁剪

来自分类Dev

如何按比例调整标签大小

来自分类Dev

按比例调整UIStackView中按钮的大小

来自分类Dev

自动调整图像大小以适合比例,但不拉伸

来自分类Dev

调整图像大小以适合<td>或div

来自分类Dev

如何调整svg的大小以适合div?

来自分类Dev

如何调整大型svg的大小以适合div

来自分类Dev

根据屏幕大小按比例调整文本大小

来自分类Dev

使用CSS“填充技巧”在Y轴上按比例调整大小?

来自分类Dev

使嵌入式iframe比例尺适合封闭的div

来自分类Dev

iframe调整大小无法使用srcdoc html调整iframe的大小

来自分类Dev

通过获取scrollHeight(javascript)调整iFrame的大小以适合内容

来自分类Dev

如何强制iframe调整大小以适合嵌入式文档?

来自分类Dev

jQuery Cycle2调整图像大小以适合div,但仅水平图像

来自分类Dev

如何使用可调整大小的jQuery在x和y轴上以正确的比例调整图像大小

Related 相关文章

  1. 1

    按比例调整表格大小以适合div

  2. 2

    在Webapp中按比例调整div的大小

  3. 3

    jQuery-调整图像大小以适合div

  4. 4

    如何使网站(图像/表格)按比例调整大小以适合屏幕尺寸

  5. 5

    在Java中使用BorderLayout按比例调整大小

  6. 6

    使用JQuery,如何执行可调整大小的div以使其适合其子控件?

  7. 7

    按宽度按比例调整UIImage的大小

  8. 8

    按宽度按比例调整UIImage的大小

  9. 9

    调整大小以适合div的图标

  10. 10

    调整大小以适合div的图标

  11. 11

    在窗口调整大小时按比例调整div的宽度和高度

  12. 12

    按比例缩放div以适合视口

  13. 13

    按比例缩放div以适合视口

  14. 14

    在Firefox中按比例调整图像大小

  15. 15

    按比例调整UIImage的大小,然后裁剪

  16. 16

    如何按比例调整标签大小

  17. 17

    按比例调整UIStackView中按钮的大小

  18. 18

    自动调整图像大小以适合比例,但不拉伸

  19. 19

    调整图像大小以适合<td>或div

  20. 20

    如何调整svg的大小以适合div?

  21. 21

    如何调整大型svg的大小以适合div

  22. 22

    根据屏幕大小按比例调整文本大小

  23. 23

    使用CSS“填充技巧”在Y轴上按比例调整大小?

  24. 24

    使嵌入式iframe比例尺适合封闭的div

  25. 25

    iframe调整大小无法使用srcdoc html调整iframe的大小

  26. 26

    通过获取scrollHeight(javascript)调整iFrame的大小以适合内容

  27. 27

    如何强制iframe调整大小以适合嵌入式文档?

  28. 28

    jQuery Cycle2调整图像大小以适合div,但仅水平图像

  29. 29

    如何使用可调整大小的jQuery在x和y轴上以正确的比例调整图像大小

热门标签

归档