在做项目时碰到了要在页面上显示一个浮动DIV层的效果。本来做的是在页面居中时显示的,但后来经过自己的测试发现,当网页中出现了滚动条之后,那个浮动的DIV却还是在页面的顶部显示的。因此当用户在一个较长内容的网页中点击某一个按钮显示DIV层会发现没有任何效果(其实已经在页面的顶部显示了),因此,我们需要准备的知道用户当前的浏览的位置的信息。在实现这个要求之前,先来看看在js中有哪些工具可以让我们使用:

网页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域宽: document.body.offsetWidth + " (包括边线和滚动条的宽)";
网页可见区域高:document.body.offsetHeight + " (包括边线的宽)";
网页正文全文宽:document.body.scrollWidth;
网页正文全文高:document.body.scrollHeight;
网页被卷去的高(ff): document.body.scrollTop;
网页被卷去的高(ie):document.documentElement.scrollTop;
网页被卷去的左:document.body.scrollLeft;
网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的宽: window.screen.width;
屏幕可用工作区高度: window.screen.availHeight;
屏幕可用工作区宽度: window.screen.availWidth;
你的屏幕设置是  window.screen.colorDepth +" 位彩色";
你的屏幕设置  window.screen.deviceXDPI +" 像素/英寸";

这段资料来源于网络,看到这么多的相似的概念时我已经疯掉了,但处于技术人的执着,我还是顽强的看完了并做了一些理解。经过自己的理解和吸收之后,我觉得如果我每次想获取一个高度或者宽度信息时我会抓狂的,因此,我对浏览器的这些属性做了一些整理和抽象,按照这样的三个对象来剥离这么多的相似的属性,第一个是页面,第二是窗口,第三个是视口。来看图片理解我的这三个对象的含义吧:

对这三个概念做一个解释:

页面:就是我们制作出来的网页的页面的一个抽象,他的高度通常比我们的浏览器的高度要高,宽度通常是小于等于我们的浏览器宽度

浏览器窗口:就是我们使用的浏览器的一个抽象,他包含了菜单栏、工具栏、书签栏、状态栏、页面显示区等。因此他的高度绝对大于等于视口的高度,宽度绝对大于等于视口的宽度

视口:就是浏览器中显示页面的区域

有了这三个概念铺底,我们来写个小类库,获取这个“对象”的高度和宽度等信息吧:

var Browser = {};//页面
Browser.Page = (function () {return {scrollTop: function () {return Math.max(document.body.scrollTop, document.documentElement.scrollTop);},scrollLeft: function () {return Math.max(document.body.scrollLeft, document.documentElement.scrollLeft);},height: function () {var _height;if (document.compatMode == "CSS1Compat") {_height = document.documentElement.scrollHeight;} else {_height = document.body.scrollHeight;}return _height;},width: function () {var _width;if (document.compatMode == "CSS1Compat") {_width = document.documentElement.scrollWidth;} else {_width = document.body.scrollWidth;}return _width;}};})();//窗口:
Browser.Window = (function () {return {outerHeight: function () {var _hei = window.outerHeight;if (typeof _hei != "number") {_hei = Browser.ViewPort.outerHeight();}return _hei;},outerWidth: function () {var _wid = window.outerWidth;if (typeof _wid != "number") {_wid = Browser.ViewPort.outerWidth();}return _wid;},innerHeight: function () {var _hei = window.innerHeight;if (typeof _hel != "number") {_hei = Browser.ViewPort.innerHeight();}return _hei;},innerWidth: function () {var _wid = window.innerWidth;if (typeof _wid != "number") {_wid = Browser.ViewPort.innerWidth();}return _wid;},height: function () {return Browser.Window.innerHeight();},width: function () {return Browser.Window.innerWidth();}}})();//视口:
Browser.ViewPort = (function () {return {innerHeight: function () {var _height;if (document.compatMode == "CSS1Compat") {_height = document.documentElement.clientHeight;} else {_height = document.body.clientHeight;}return _height;},innerWidth: function () {var _width;if (document.compatMode == "CSS1Compat") {_width = document.documentElement.clientWidth;} else {_width = document.body.clientWidth;}return _width;},outerHeight: function () {var _height;if (document.compatMode == "CSS1Compat") {_height = document.documentElement.offsetHeight;} else {_height = document.body.offsetHeight;}return _height;},outerWidth: function () {var _width;if (document.compatMode == "CSS1Compat") {_width = document.documentElement.offsetWidth;} else {_width = document.body.offsetWidth;}return _width;},width: function () {return Browser.ViewPort.innerWidth();},height: function () {return Browser.ViewPort.innerHeight();}}})();

做几点说明:

1、已经能支持获取多浏览器的内部的视口的宽度和高度信息

2、在IE 9中已经和其他的浏览器(Opera、Chrome、FirFox、Safari)一样,已经能支持用window.innerHeight、window.innerWidth、window.outerHeight、window.outerWidth这四个属性获取浏览器的窗口、视口的宽度高度信息,但是IE9以前的IE版本是没有这些属性的,因此在这样的情况下,我将视口和窗口的概念等同起来了。

2、虽然window有宽度和高度信息,但是不一定是真正浏览器窗口的真正的宽度和高度信息。因为有些浏览器返回的结果中就不含菜单栏、工具栏等的高度信息。

实例演示:

在一个垂直内容过多的页面中,使一个DIV总能保持在视口的中心位置(非精确中心位置):

代码:

window.onload = window.onresize = function () {

var top = Math.round(Browser.Page.scrollTop() + (Browser.ViewPort.height() / 2) - (parseInt(document.getElementById("divCenter").style.height) / 2));
            var left = Math.round(Browser.Page.scrollLeft() + (Browser.ViewPort.width() / 2) - (parseInt(document.getElementById("divCenter").style.width) / 2));

document.getElementById("divCenter").style.top = top + "px";
            document.getElementById("divCenter").style.left = left + "px";

}

大家测试时可以采用改变窗口大小的方式来查看。

时间不早了,晚安!

源代码下载查看

转载于:https://www.cnblogs.com/liszt/archive/2012/01/15/2322692.html

用js小类库获取浏览器的高度和宽度信息相关推荐

  1. js中动态获取页面的高度和宽度的方法总结

    javascript,jquery获取网页的高度和宽度: javascript: 可视区域宽:document.documentElement.clientWidth(width+padding) 可 ...

  2. js 如何获取浏览器的高度和宽度

    IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.d ...

  3. js获取当前浏览器页面高度及宽度信息的方法

    function getInfo()         {             var s = "";             s += " 网页可见区域宽:" ...

  4. 获取浏览器窗口高度和宽度兼容IE

    代码如下 // 浏览器窗口的宽度,兼容 Internet Explorer 8, 7, 6, 5 function getClientWidth(){return window.innerWidth ...

  5. js和jQuery获取浏览器窗口的高度、宽度的方法详解

    有三种方法能够确定浏览器窗口的尺寸(浏览器的视口,不包括工具栏和滚动条). 对于Internet Explorer.Chrome.Firefox.Opera 以及 Safari: window.inn ...

  6. jq获取页面高度_通过 jQuery 获取浏览器窗口高度问题

    我曾经在使用jQuery一些东西的时候碰到了这样一些奇怪的问题.例如,我尝试着用 jQuery 的 $(window).height() 来获取浏览器窗口高度,就遇到了问题. 理论上,$(window ...

  7. js获取div元素高度和宽度的方法

    前端web页面中,js可以很方便的获取div元素的高度和宽度,那么这篇文章就说一说原生JS与JQ如何快速的获取DIV元素的高度和宽度的方法. js获取div元素高度与宽度的方法 js获取div元素的高 ...

  8. 通过selenium获取浏览器的cookie等头部信息

    通过selenium获取浏览器的cookie等头部信息 一.背景介绍 对于部分有登陆限制的网站/APP我们无法通过登陆接口实现登陆(比如验证码) 但是我们还想绕过登陆接口通过接口来实现一些操作,毕竟U ...

  9. javascript中获取dom元素高度和宽度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight ...

  10. js获取浏览器和设备相关宽度和高度

    首先呢,我们将iPhone手机的相关数据表示如下 我们要理解很多东西,比如逻辑分辨率.物理分辨率.缩放因子.ppi等,这里先不讨论. 首先呢,我们先介绍下各个屏幕宽度: 网页可见区域宽: docume ...

最新文章

  1. Geohash的精度问题
  2. sqlserver2008r2表复制原表_SQL Server 2008 R2 主从数据库同步
  3. 9. 混合模型和EM(1)
  4. php后台无法接受文件,ios afnetworking2.x上传图片 服务端php无法接受文件问题
  5. POI对Excel自定义日期格式的读取
  6. Spring @Required 注释
  7. java给文件添加水印_Java在PDF中添加水印(文本/图片水印)
  8. 图像傅里叶变换的幅度谱、相位谱以及双谱重构原图像
  9. window server2012服务器上如何安装nginx并启动
  10. Android Binder Driver流程分析
  11. 在ROS使用usb深度相机跑ORBSLAM3
  12. gmail如何配置163邮箱服务器端口,hotmail,gmail,live,QQ,163,yahoo邮箱服务器及端口号,outlook,foxmail 设置...
  13. linux内存显示少,linux 显示的内存怎么少于我实际的物理内存
  14. 车载以太网第二弹 | 测试之实锤-IOP测试实践
  15. iOS 5 故事板进阶(2)
  16. mysql提交数据时会丢失一部分_技术|MYSQL数据丢失讨论
  17. 电脑速度变慢的原因及处理方法
  18. 今日踩坑Maven:omitted for duplicate
  19. java visibility_[Java教程]display 与 visibility
  20. android canvas广告牌,亚马逊广告后台创建CPC站内广告教程

热门文章

  1. html5转PDF软件,html转pdf软件(wkhtmltopdf) 0.12.5官方版
  2. python oop 实践_Python OOP示例?
  3. III.Data Modeling and Aggregation(数据模型和整合)
  4. 【渝粤题库】陕西师范大学400001 思想政治教育原理 作业(专升本)
  5. 基于频繁增长树(FP-树)的频繁项集挖掘算法实现
  6. 基于LSTM的时间序列预测-原理-python代码详解
  7. Jmeter逻辑控制器操作,附栗子
  8. UiPath: Studio 快捷键
  9. 【Python3 爬虫】12_代理IP的使用
  10. 架构设计之Spring-Session分布式集群会话管理