浏览器有关的宽高详解编程语言
window对象表示浏览器打开的窗口(可以省略,全局变量挂载在window对象下,alert,confirm等方法)。document对象是HTML文档,是window对象的一部分(document.body可以写成window.document.body)。
与window有关的宽高介绍window.innerHeight和window.outerHeight的区别在于,前者是浏览器内部文档的高度,后者是整个浏览器窗口的高度。window.innerWidth和window.outerWidth一般相同。
window.screen代表用户的屏幕。window.screen.height代表整个屏幕的高度,window.screen.availHeight代表屏幕中可利用的高度(比前者少了一个菜单栏)。window.screen.width和window.screen.availWidth相同。
screenTop代表浏览器距离屏幕顶部的距离,screenLeft为浏览器距离屏幕左边的距离.
window.innerHeight和window.innerWidth(可视区域)在IE8及其以下浏览器是不支持的。所以我们要使用这样的兼容方案
var seeWidth = document.ducumentElement.clientWidth || document.body.clientWidth; var seeHeight = document.ducumentElement.clientHeight || document.body.clientHeight;documentElement
document是文档元素,nodeType = 9,nodeName = #document。documentElement的nodeType = 1, nodeName = HTML。
body既可以通过document.body拿到,也可以通过documentElement的childNodes得到。
这里我们分成三部分:
与client相关的宽高 与offset相关的宽高 与scroll相关的宽高 与client相关的宽高元素.clientWidth和元素.clientHeight指的是元素的可视部分宽度和高度,即padding + content。(注意如果元素被隐藏了,他的宽高就没有值)。如果没有滚动条,即为元素设定的高度和宽度。如果出现滚动条(比如元素overflow: scroll),那么该属性就是其本来宽高减去滚动条的宽高。举一个栗子:
body { border: 20px solid #ccc; margin: 10px; padding: 40px; background: red; height: 350px; width: 500px; overflow: scroll; //430(350 + 80) console.log(document.body.clientHeight); //580,不包含border console.log(document.body.clientWidth);
那么我们再来看一个div
#main { width: 200px; height: 200px; background: red; border: 1px solid #000; overflow: auto; //我们在div中不断添加文字直到出现滚动条 var div = document.getElementById(main); //200 console.log(div.clientHeight); //在windows下是183,在mac下是200(滚动条没显示的时候) console.log(div.clientWidth);
那么我们总结一下
//假如无padding无滚动 clientWidth = style.width //假如有padding无滚动 clientWidth = style.width + style.padding * 2; //假如有padding有滚动,且滚动是显示的 clientWidth = style.width + style.padding * 2 - 滚动轴宽度
IE6以上浏览器都支持clientHeight和clientWidth。
元素的clientLeft和clientTop这两个返回的是元素周围边框的厚度,如果不指定一个边框或者不定位该元素,它的值就是0
body { border: 20px solid #ccc; margin: 10px; padding: 40px; background: red; height: 350px; width: 500px; overflow: scroll; //20, clientTop = border-top的border-width console.log(document.body.clientLeft); //20,clientLeft = border-left的border-width console.log(document.body.clientTop);与offset相关的宽高
offsetWidth和offsetHeight指的是元素的border + padding + content的宽度和高度,该属性和内部的内容是否超出元素大小无关,只和本来设定的border以及width和height有关,还是上面的栗子
body { border: 20px solid #ccc; margin: 10px; padding: 40px; background: red; height: 350px; width: 500px; overflow: scroll; //470(350 + 80 + 40) console.log(document.body.offsetHeight); //620 console.log(document.body.offsetWidth);
offsetWidth和offsetHeight所有浏览器的支持一致。
offsetLeft和offsetTop是基于offsetParent的。对于offsetParent,如果当前元素的父级元素没有进行CSS定位(position为absolute或relative),offsetParent为body,如果当前元素的父级元素中有CSS定位,offsetParent就取最近的那个父级元素。
//在IE6/7中 offsetLeft = (offsetParent的padding-left) + (当前元素的margin-left); //在IE8/9/10及Chrome中 offsetLeft = (offsetParent的margin-left) + (offsetParent的border宽度) + (offsetParent的padding-left) + (当前元素的margin-left); //在firefox中 offsetLeft = (offsetParent的margin-left) + (offsetParent的padding-left) + (当前元素的margin-left)
还是刚才的栗子
body { border: 20px solid #ccc; margin: 10px; padding: 40px; background: red; height: 350px; width: 500px; overflow: scroll; #main { width: 400px; height: 200px; background: red; padding: 20px; margin: 10px; border: 20px solid #000; overflow: auto; //我们在div中不断添加文字直到出现滚动条 var div = document.getElementById(main); //在IE6/7中 console.log(div.offsetLeft); //50 console.log(div.offsetTop); //50 //在IE8/9/10及Chrome中 console.log(div.offsetLeft); //80 console.log(div.offsetTop); //80 //在firefox中 console.log(div.offsetLeft); //60 console.log(div.offsetTop); //60与scroll相关的宽高
document.body的scrollWidth和scrollHeight与普通元素如div的scollWidth和scrollHeight是有点区别的
body { border: 20px solid #ccc; margin: 10px; padding: 40px; background: red; height: 350px; width: 500px; overflow: scroll; //浏览器高度 document.body.scrollHeight //浏览器宽度 document.body.scrollWidth
当给定的宽高小于浏览器窗口,document.body.scrollWidth通常是浏览器窗口的宽度,document.body.scrollHeight 通常是浏览器窗口的高度。如果给定宽高大于浏览器窗口,且内容小于给定宽高,document.body.scrollWidth = 给定的宽度 + 其所有的padding、margin和border。如果给定宽高大于浏览器窗口,且内容大于给定宽高,document.body.scrollWidth = 内容的宽度 + 其所有的padding、margin和border。(有兼容性问题,上述是Chrome浏览器中)
接下来我们看一下普通元素如div中的scrollWidth
#main { width: 400px; height: 200px; background: red; padding: 20px; margin: 10px; border: 20px solid #000; overflow: auto; var div = document.getElementById(main); //200 + 20 * 2 = 240 console.log(div.scrollWidth); //440 + 20 * 2 = 440 console.log(div.scrollHeight); //接下来我们填充div的内容使其出现滚动轴
我们得出这样一个结论
//在无滚动轴的情况 scrollWidth = clientWidth = style.width + style.padding * 2; //在有滚动轴的情况下(实际内容超出了定义的宽) scrollWidth = 实际内容的宽度 + padding * 2;
scrollLeft和scrollTop是可读写的,指的是当元素内容超出其宽高的时候,元素被卷起的高度和宽度。
#main { width: 400px; height: 200px; background: red; padding: 20px; margin: 10px; border: 20px solid #000; overflow-y: scroll; var div = document.getElementById(main); //0 console.log(div.scrollTop); //0 console.log(div.scrollLeft); div.scrollTop = 20; console.log(div.scrollTop);
可以通过这个属性获取滚动条距离顶部高度进行可视区域加载,具体可以参考我另一篇博客 lazyLoad与节流
//可视区域 var seeHeight = window.innerHeight || document.documentElementHeight || document.body.clientHeight; //滚动条距离顶部高度 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
13496.html
cjavamacwindows相关文章
- jQuery判断浏览器是移动端还是桌面端自动跳转代码详解编程语言
- JavaScript正则判断浏览器是否为手机浏览器做跳转代码详解编程语言
- jQuery 自动识别浏览器语言详解编程语言
- js检测浏览器版本方法详解编程语言
- JS控制浏览器全屏详解编程语言
- javascript 获取页面高度(多种浏览器)详解编程语言
- 浏览器缓存机制详解编程语言
- 空格 在不同浏览器中显示距离不一致问题解决方法详解编程语言
- window.open()详解及浏览器兼容性问题编程语言
- Javascript 判断浏览器版本和名称详解编程语言
- 解决文件下载在火狐浏览器出现中文文件名乱码的方法详解编程语言
- HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端编程语言
- 让html元素随浏览器的大小自适应垂直居中详解编程语言
- ABAP-HTML浏览器详解编程语言
- HttpClient模拟postman/浏览器(登录+访问接口)详解编程语言