JavaScript -获取屏窗与视窗、文档宽高
实例:1920*1080的电脑屏幕
1、获取窗口中的文档显示区域宽高
clientw = window.innerWidth; //1920(包含滚动条)
clienth = window.innerHeight; //883(不含工具条)
2、获取窗口(包括滚动条与工具条)区域宽高
clientw = window.outerWidth; //1920(包含滚动条)
clienth = window.outerHeight; //883(包含工具条)
1与2 的区别在于:是否包含工具条
window.innerWidth == window.outerWidth //他们两是相等了,都包含的滚动条的宽度 唯一不同的在高度,如: 当我们未按下F12的时候,也就是当我们暂时没有工具条的时候
clientw = window.innerHeight; //883(不含工具条)
clienth = window.outerHeight; //883(含工具条)

当我们按下F12的时候,就会发现区别很明显了
clientw = window.innerHeight; //627(不含工具条)
clienth = window.outerHeight; //883(含工具条)

3、获取网页可见区域宽高
clientw = document.body.clientWidth; //1903(不包含滚动条)
clienth = document.body.clientHeight; //866(不包含工具条)
4、获取网页可见(含边线,但不是边距)区域宽高
clientw = document.body.offsetWidth; //1903(不包含滚动条,含边线)
clienth = document.body.offsetHeight; //866(不包含工具条,含边线)
3与4的区别在于:是否包含边线
我们发现上述两者获取的网页可见区域宽高是相等的,那是因为我们的body上没有设置border的时候,如下区别就很明显了:
/*我们给body设置一个1像素的边框*/
body { border: 1px solid #000000;}
clientw = document.body.clientWidth; //1903(不含滚动条)
clienth = document.body.clientHeight; //610(不含工具条) clientw1 = document.body.offsetWidth; //1905(不含滚动条,含边线)
clienth2 = document.body.offsetHeight; //612(不含工具条,含边线) 最终显示为:
我们发现client...没有加上body的边线而offset...包含的边线,这就他们明显的区别
在这里还有一小细节,就是当你的内容高度超出了视窗,滚动条产生自带的滚动条时,你需要再次调用这个方法来获取的你的视窗。
方法解析步骤:
1、获取视窗可用区域的宽度:1920
2、判断是否超出视窗,超出加载滚动条
3、再次调用方法获取视窗可用区域宽度:1903(这里才是真正不包含滚动条的值)
为了避免获取到的值没有减掉滚动条
我们可以调用两次,比如这样:
clientw = document.body.clientWidth;//
clientw = document.body.clientWidth;//
5、网页正文全文宽高
clientw = document.body.scrollWidth; //1903(不含滚动条)
clienth = document.body.scrollHeight; //1269(不含工具条)
所谓正文全文,实际就是整个网页文档的宽高,既然是整个网页文档宽高肯定就是,网页内容有多宽那个宽就是多少,网页内容有多高那高就是多少了,当然同样包含着边线
body {
border: 1px solid #000000;
}
.content {/*比如这是文档的全部内容*/
width: 2000px;
height: 1500px;
background-color: #808080;
}
那么我们现在获取到的宽高就是:

我们发现他的边线只加了1px,也就是值加了一边,而没有全加上,而这个是在360中测试的结果,接着我在其他做了测试,测试结果如下:
360,谷歌,Edge,edge仿真ie8+:2001*1501
火狐,ie11:2000*1500
我发现他的结果并不稳定,因此使用他获取整个body文档的宽高当存在border的时候,并是最理想的,他用于获取某些文档节点的宽高相对就比较稳定了。
6、屏窗
所谓屏窗就是整个屏幕窗口,我们前面说的到都属于视窗,也就是可视区域的窗口
获取屏窗一般使用:
clientw = window.screen.width; //
clienth = window.screen.height; //
其获取到的是我们客户端整个屏幕的宽高
第二种是获取屏幕可用工作去宽高
clientw = window.screen.availWidth; //
clienth = window.screen.availHeight; //
即获取到的是显示浏览器的屏幕的可用宽高,这个可用高度不包括分配给半永久特性(如屏幕底部的任务栏)的垂直空间
注意这里的任务栏与工具栏不同,要注意区分,浏览器的工具栏指的是类似于F12这样的调控工具栏,而任务栏则指的是浏览器最底下的状态栏,是始终存在的,而工具栏是可以关闭的
工具栏可以关闭
任务栏始终存在
作者:leona
原文链接:http://www.cnblogs.com/leona-d/p/6347013.html
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接
JavaScript -获取屏窗与视窗、文档宽高的更多相关文章
- JS中级 - 03:文档宽高及窗口事件(选)
可视区尺寸 document.documentElement.clientWidth document.documentElement.clientHeight 滚动距离 document.body. ...
- BOM,文档宽高及窗口事件小析
(一)BOM:Browser Object Model(浏览器对象模型)页面上所有的变量都是window的属性 一.方法:1. open(,)打开一个新窗口(页面)一参为页面地址url,二参为打开方式 ...
- iOS开发——数据持久化Swift篇&文件目录路径获取(Home目录,文档目录,缓存目录等)
文件目录路径获取(Home目录,文档目录,缓存目录等) iOS应用程序只能在自己的目录下进行文件的操作,不可以访问其他的存储空间,此区域被称为沙盒.下面介绍常用的程序文件夹目录: 1,Home ...
- Swift - 常用文件目录路径获取(Home目录,文档目录,缓存目录等)
当前位置: 首页 > 编程社区 > Swift > Swift - 常用文件目录路径获取(Home目录,文档目录,缓存目录等) Swift - 常用文件目录路径获取(Home目录,文 ...
- 【转】IOS获取屏窗高度踩坑之window.outerHeight
近日本人在直接使用window.outerHeight获取屏窗高度时 在iphone 6中出现等于0的情况,从而导致页面发生错误 后找遍代码,测试无数,终于让我逮住了这个该死兼容 window.out ...
- js动态获取浏览器或页面等容器的宽高
首先说一下js动态获取浏览器或页面等容器的宽高的方法大体有哪些: 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHei ...
- javaScript高级教程(六) 获取窗口,屏幕,文档信息
1.屏幕坐标:相对于桌面左上角 窗口坐标:相对于窗口的左上角 文档坐标:相对于html文档左上角 当有滚动条时,窗口坐标与文档坐标之间有区别
- JavaScript学习笔记7 之DOM文档对象模型
一.什么是DOMDocument Object Model 文档 -------对象 ----模型-------缩写DOM DOM是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘 ...
- javascript之DOM(Document Object Model) 文档对象模型
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
随机推荐
- C#指南,重温基础,展望远方!(6)C#类和对象
类是最基本的 C# 类型. 类是一种数据结构,可在一个单元中就将状态(字段)和操作(方法和其他函数成员)结合起来. 类为动态创建的类实例(亦称为“对象”)提供了定义. 类支持继承和多形性,即派生类可以 ...
- C# 操作ini配置文件
最近使用Winform做一个小系统,由于需要保存一些默认配置项.自然就想到了轻量级的配置文件类型ini.在此也分享和记录一下实现方式,方便以后查询和使用. 废话不多说上代码: 实现公共函数↓ publ ...
- Rabbitmq消息队列(六) 主题交换机
1.简介 前面学习了有选择性的接收消息,但是却没有办法基于多个标准来接收消息.为了实现这个目的,接下来我们学习如何使用另一种更复杂的交换机 —— 主题交换机. 2.主题交换机 发送到主题交换机(top ...
- C 语言文件拷贝
相关的方法: int fputs(const char*s,FILE *stream); int gets(char *s,int size,FILE *stream); 具体代码如下 /** *@a ...
- atitit. 管理哲学 大毁灭--- 如何防止企业的自我毁灭
atitit. 管理哲学 大毁灭--- 如何防止企业的自我毁灭 1. 为什么企业组织的生命力 普遍不如国家组织的长久 2 2. 企业的不稳定因子如下:: 2 3. 决策制度 2 3.1. 我们老大说 ...
- Atitit.软件开发的几大规则,法则,与原则。。。attilax总结
Atitit.软件开发的几大规则,法则,与原则... 1. 设计模式六大原则 2 1.1. 设计模式六大原则(1):单一职责原则 2 1.2. 设计模式六大原则(2):里氏替换原则 2 1.3. 设计 ...
- Eclipse Jetty Integration
http://eclipse-jetty.sourceforge.net/ Introduction Eclipse Jetty Integration provides a launch confi ...
- matplotlib之极坐标系的极径网格线(rgrids)的显示刻度
matplotlib之极坐标系的极径网格线(rgrids)的显示刻度 #!/usr/bin/env python3 #-*- coding:utf-8 -*- #################### ...
- oracle 创建表空间及oracle 11g表空间之最大最小
/*分为四步 *//*第1步:创建临时表空间 */create temporary tablespace emaoyi_temp tempfile 'D:\app\Administrator\prod ...
- Makefile 13——理解make的解析行为
make是以从上到下的顺序读入Makefile中的内容的.然而,处理Makefile中的语句却并非完全从上到下. 大体上,make处理一个Makefile分为两个阶段.第一个阶段包含: 1.make读 ...
