js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法


Posted in Javascript onNovember 21, 2016

如下所示:

screen.width
screen.height


screen.availHeight //获取去除状态栏后的屏幕高度
screen.availWidth //获取去除状态栏后的屏幕高度

一、通过浏览器获得屏幕的尺寸

二、获取浏览器窗口内容的尺寸

//高度
window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight

//宽度
window.innerWidth || document.documentElement.clientWidth || document.body.clientWidht

/ * 
 * window.innerHeight  FF/CH 支持,获取窗口尺寸。
 * document.documentElement.clientHeight  IE/CH支持
 * document.body.client  通过body元素获取内容的尺寸

* /

三、滚动条支持的差异性

不进行任何滚动条更改的页面,Firefox/IE 默认认为HTML元素具有滚动条属性。而body不具有。

但Chrome 则认为body是具有滚动条属性的。

因此兼容性的写法是:

document.documentElement.scrollTop || document.body.scrollTop

四、获取元素的尺寸

elemnt.offsetWidth
elemnt.offsetHeight

// 仅IE5不支持,放心使用吧

说明图:

js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法

* offsetWidth 可以获取元素的高度尺寸,包括:width + padding[left,right] + border[left,right]

* offsetHeight 可以获取元素的宽度尺寸,包括:height + padding[top,bottom] + bottom[top,bottom]

五、元素的偏移属性

element.offsetTop //获取元素与其偏移参考父元素顶部的间隔距离
element.offsetLeft //获取元素与其偏移参考父元素左边的间隔距离
element.offsetParent //获取当前元素的参考父元素

*offsetTop 可以获取元素距其上一级的偏移参考父元素顶部的距离。包括:margin[top] + top

*offsetLeft 可以获取元素距其上一级的偏移参考父元素左边的距离。包括:margin[left] + left

*注意的是offsetParent在IE6/7,与IE8/FF/CH中存在兼容性问题:

在FF/Chrome/IE8+ :

如果当前元素有定位,则偏移参考父元素是其上一级的最近的那个定位元素。

如果当前元素没有定位,则默认以body为最终的参考父元素。

在IE6/7:

不论有没有定位,其偏移参考父元素都是其上一级的父元素。

总的来说:

不论是FF/Chrome还是IE,最终的参考父元素都是body元素, 因此兼容的方法就是获取当前元素到body元素的偏移位置值。

兼容性写法

function getOffestValue(elem){

    var Far = null;
    var topValue = elem.offsetTop;
    var leftValue = elem.offsetLeft;
    var offsetFar = elem.offsetParent;

    while(offsetFar){
      alert(offsetFar.tagName)
      topValue += offsetFar.offsetTop;
      leftValue += offsetFar.offsetLeft;
      Far = offsetFar;
      offsetFar = offsetFar.offsetParent;
    }
    return {'top':topValue,'left':leftValue,'Far':Far}
  }

/*
 * top 当前元素距离body元素顶部的距离。
 * left 当前元素距离body元素左侧的距离。
 * Far 返回最终的参考父元素。
*/

以上这篇js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript Cookie的读取和写入函数
Dec 08 Javascript
jquery validate poshytip 自定义样式
Nov 26 Javascript
JS实现的省份级联实例代码
Jun 24 Javascript
js获取select选中的option的text示例代码
Dec 19 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
Feb 13 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
May 25 Javascript
bootstrap侧边栏圆点导航
Jan 11 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
Jun 04 Javascript
webpack多页面开发实践
Dec 18 Javascript
基于axios封装fetch方法及调用实例
Feb 05 Javascript
vue.js计算属性computed用法实例分析
Jul 06 Javascript
vue自定义指令之面板拖拽的实现
Apr 14 Javascript
JS中判断null的方法分析
Nov 21 #Javascript
javascript 利用arguments实现可变长参数
Nov 21 #Javascript
js 点击a标签 获取a的自定义属性方法
Nov 21 #Javascript
浅谈JS读取DOM对象(标签)的自定义属性
Nov 21 #Javascript
AngularJS Phonecat实例讲解
Nov 21 #Javascript
浅谈React 属性和状态的一些总结
Nov 21 #Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
Nov 21 #Javascript
You might like
PHP 身份证号验证函数
2009/05/07 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
2020/05/10 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
python如何修改装饰器中参数
2018/03/20 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
python中类的属性和方法介绍
2018/11/27 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
VSCode Python开发环境配置的详细步骤
2019/02/22 Python
Python用字典构建多级菜单功能
2019/07/11 Python
Python PO设计模式的具体使用
2019/08/16 Python
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
工作岗位说明书模板
2014/05/09 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
2014年教务处工作总结
2014/12/03 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
2015年保管员工作总结
2015/04/30 职场文书
Redis Cluster集群动态扩容的实现
2021/07/15 Redis