代码之家  ›  专栏  ›  技术社区  ›  Anthony

在浏览器窗口调整大小时保持纵横比?

  •  2
  • Anthony  · 技术社区  · 16 年前

    我有一个带有图像的简单页面,当用户单击图像时,它将打开一个新的浏览器窗口,其中图像将填充该区域。我在新窗口上设置了CSS,这样图像的高度和宽度都是100%(和 overflow 设置为 hidden )以便调整窗口大小。

    但我需要的是,如果用户调整了窗口的大小,它可以保持纵横比。现在,我被卡住了,因为我不知道这个活动是如何运作的,但我认为我正在使这变得比需要的更困难。现在我有:

    $(function(){
        $(window).resize(function() {
            var height = $(this).attr("innerHeight");
            var width = $(this).attr("innerWidth");
            if(height/width != .75){
                window.resizeTo(width,width*.75);
            }
        });
    });
    

    在添加条件之前,窗口将立即开始收缩(显然打开一个新窗口会触发调整大小事件)。添加条件可防止窗口打开时发生这种情况,但任何调整大小都会再次开始收缩。

    这仅仅是因为高度和宽度从来都不是正确的比例(我应该手动将宽度设置为一个整数吗)还是我做错了什么?还是有其他方法可以更直接地得到我想要的?

    1 回复  |  直到 14 年前
        1
  •  1
  •   richardtallent    16 年前

    我相信你走对了,但是 resizeTo() 调整大小 整个的 浏览器窗口,包括窗口框架、工具栏、菜单等。

    所以,当你打电话的时候 RsisiTo() ,它发射,探测 内部的 高度/宽度不是所需的纵横比,它会调整整个窗口、框架和工具栏的大小。

    这就是火灾 RsisiTo() 再次,这发现,再次,内部纵横比是不正确的,因此不断射击和调整大小。 无穷大 .

    要解决此问题,您需要:

    1. 检测 通过调整大小然后测试innerwidth/innerheight来确定外部大小。记住,这可以随着用户使用浏览器而改变。
    2. 呼叫 resizeTo 它的尺寸占外部铬合金的比例,并达到内部宽度/内部高度所需的高宽比。