使用jQuery获取视口大小

Vol*_*ike 304 size jquery resize viewport

如何使用jQuery确定浏览器视口的大小,并在页面调整大小时重新检测?我需要在这个空间中建立一个IFRAME大小(每个边缘都有一点).

对于那些不知道的人,浏览器视口不是文档/页面的大小.它是滚动前窗口的可见大小.

Sim*_*aWB 480

要获取视口的宽度和高度,请执行以下操作:

var viewportWidth = $(window).width();
var viewportHeight = $(window).height();
Run Code Online (Sandbox Code Playgroud)

调整页面的大小:

$(window).resize(function() {

});
Run Code Online (Sandbox Code Playgroud)

  • 知道如何获得设备屏幕上可见的区域,而不仅仅是它可以滚动到哪个区域?我看到$(window).height()返回文档的整个宽度,而不是缩放的部分.我想知道应用缩放后可见多少. (48认同)
  • 这是完全错误的.这将为您提供文档的大小,而不是视口(文档窗口的大小). (21认同)
  • 我在Windows IE6,IE8,FF3.6.3,谷歌Chrome 5.0.375.70,Opera 10.53和Safari 5.0(7533.16)上进行了测试.这在所有这些方面始终如一.我还在Ubuntu上测试了FF3.6.3,它也在那里工作.我想我正在使用带有WordPress 2.9.2的jQuery 1.3,这是我需要这个工作的地方. (18认同)
  • @FrankSchwieterman也许你的浏览器没有按照你想要的方式运行:也许你遇到了这个问题:http://stackoverflow.com/q/12103208/923560.确保您的HTML文件包含正确的`DOCTYPE`声明,例如`<!DOCTYPE html>`. (17认同)
  • 实际上,`innerWidth` /`innerHeight`使用起来更正确(覆盖缩放). (9认同)
  • @MikeBethany和ToniLeigh,你打开了Abdull上面发布的链接吗?这可能会解决您的问题. (4认同)
  • @Mike和@Toni,`$(window).width()`和`$(window).height()`分别返回视口的宽度和高度.`$(document).width()`和`$(document).height()`返回文档的测量值.这是根据jQuery API. (2认同)

Vit*_*nko 39

您可以尝试视口单元(CSS3):

div { 
  height: 95vh; 
  width: 95vw; 
}
Run Code Online (Sandbox Code Playgroud)

浏览器支持

  • 不适用于所有移动浏览器或iPad (2认同)

Dav*_*d L 25

1.对主要问题的回应

该脚本运行$(window).height()良好(显示视口的高度,而不是滚动高度的文档),但它需要您在文档中正确放置doctype标记,例如这些doctypes:

对于HTML 5:

<!DOCTYPE html>

对于过渡HTML4:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

某些浏览器假定的默认doctype可能是这样的,它$(window).height()取得了文档的高度而不是浏览器的高度.有了doctype规范,它已经圆满解决了,我很确定你会避免"将滚动溢出更改为隐藏然后返回",也就是说,对不起,有点肮脏的伎俩,特别是如果你不要将其记录在代码上以供将来程序员使用.

2.另外一个提示,请注意: 此外,如果您正在编写脚本,您可以创建测试以帮助程序员使用您的库,让我发明一些:

$(document).ready(function(){

      if(typeof $=='undefined') {
        alert("PROGRAMMER'S Error: you haven't called JQuery library");
      } else if (typeof $.ui=='undefined') {
        alert("PROGRAMMER'S Error: you haven't installed the UI Jquery library");
      }
      if(document.doctype==null || screen.height < parseInt($(window).height()) ) {
        alert("ERROR, check your doctype, the calculated heights are not what you might expect");
      } 
Run Code Online (Sandbox Code Playgroud)

});


编辑:关于第2部分,"附加提示,请注意":@Machiel,在昨天的评论(2014-09-04)中,是完全正确的:$的检查不能在Jquery的准备事件中,因为正如他所指出的,我们正在假设已定义$.感谢指出这一点,如果您在脚本中使用它,那么请其他读者更正.我的建议是:在你的库中放入一个"install_script()"函数来初始化库(在这样的init函数中放入任何对$的引用,包括ready()的声明)和这样的"install_script()"函数的开始,检查是否定义了$,但是使所有内容都独立于JQuery,因此当JQuery尚未定义时,您的库可以"自我诊断".我更喜欢这种方法而不是强制自动创建一个从CDN引入它的JQuery.除了帮助其他程序员外,这些都是微小的笔记.我认为制作图书馆的人必须更富有反馈给潜在程序员的错误.例如,Google Apis需要另外的手册才能理解错误消息.这是荒谬的,需要外部文档来解决一些不需要你去搜索手册或规范的小错误.该库必须是自我文档的.我编写代码甚至可以处理我可能会在六个月后犯下的错误,它仍然试图成为一个干净且不重复的代码,已经编写为防止未来的开发人员错误.

  • 阅读你的帖子非常困难.请重新发布您的帖子,以便您像其他人一样习惯[StackExchange Markdown](http://stackoverflow.com/editing-help).有[StackExchange网站不使用TinyMCE的原因](http://meta.stackexchange.com/questions/28351/why-doesnt-the-site-use-a-rich-text-editor),但如果你有抱怨它,参与[Meta](http://meta.stackoverflow.com/). (2认同)

for*_*net 5

您可以使用$(window).resize()来检测视口是否已调整大小.

当存在滚动条时,jQuery没有任何功能可以始终如一地检测视口[1]的正确宽度和高度.

我发现了一个使用Modernizr库的解决方案,特别是用于打开javascript媒体查询的mq函数.

这是我的解决方案:

// A function for detecting the viewport minimum width.
// You could use a similar function for minimum height if you wish.
var min_width;
if (Modernizr.mq('(min-width: 0px)')) {
    // Browsers that support media queries
    min_width = function (width) {
        return Modernizr.mq('(min-width: ' + width + ')');
    };
}
else {
    // Fallback for browsers that does not support media queries
    min_width = function (width) {
        return $(window).width() >= width;
    };
}

var resize = function() {
    if (min_width('768px')) {
        // Do some magic
    }
};

$(window).resize(resize);
resize();
Run Code Online (Sandbox Code Playgroud)

我的答案可能无法帮助调整iframe到100%视口宽度,每边都有一个边距,但我希望它能为web开发者提供安慰,因为javascript视口宽度和高度计算的浏览器不连贯感到沮丧.

也许这可以帮助关于iframe:

$('iframe').css('width', '100%').wrap('<div style="margin:2em"></div>');
Run Code Online (Sandbox Code Playgroud)

[1]您可以使用$(window).width()和$(window).height()来获取在某些浏览器中正确的数字,但在其他浏览器中则不正确.在这些浏览器中,您可以尝试使用window.innerWidth和window.innerHeight来获取正确的宽度和高度,但我建议不要使用此方法,因为它依赖于用户代理嗅探.

通常,不同的浏览器不确定它们是否包含滚动条作为窗口宽度和高度的一部分.

注意:$(window).width()和window.innerWidth在使用相同浏览器的操作系统之间有所不同.请参阅:https://github.com/eddiemachado/bones/issues/468#issuecomment-23626238