js获取控件位置以及不同浏览器中的差别介绍


Posted in Javascript onAugust 08, 2013
//获取坐标位置 
function getpos(e) { 
var t=e.offsetTop; 
var l=e.offsetLeft; 
var height=e.offsetHeight; 
while(e=e.offsetParent) { 
t+=e.offsetTop; 
l+=e.offsetLeft; 
} 
}

假设 obj 为某个 HTML 控件。
obj.offsetTop 指 obj 距离上方或上层控件的位置,整型,单位像素。
obj.offsetLeft 指 obj 距离左方或上层控件的位置,整型,单位像素。
obj.offsetWidth 指 obj 控件自身的宽度,整型,单位像素。
obj.offsetHeight 指 obj 控件自身的高度,整型,单位像素。

我们对前面提到的“上方或上层”与“左方或上层”控件作个说明。

例如:

<div id="tool"> 
<input type="button" value="提交"> 
<input type="button" value="重置"> 
</div>

“提交”按钮的 offsetTop 指“提交”按钮距“tool”层上边框的距离,因为距其上边最近的是 “tool” 层的上边框。
“重置”按钮的 offsetTop 指“重置”按钮距“tool”层上边框的距离,因为距其上边最近的是 “tool” 层的上边框。

“提交”按钮的 offsetLeft 指“提交”按钮距“tool”层左边框的距离,因为距其左边最近的是 “tool” 层的左边框。
“重置”按钮的 offsetLeft 指“重置”按钮距“提交”按钮右边框的距离,因为距其左边最近的是“提交”按钮的右边框。

offsetTop 可以获得 HTML 元素距离上方或外层元素的位置,style.top 也是可以的,二者的区别是:

一、offsetTop 返回的是数字,而 style.top 返回的是字符串,除了数字外还带有单位:px。
二、offsetTop 只读,而 style.top 可读写。
三、如果没有给 HTML 元素指定过 top 样式,则 style.top 返回的是空字符串。

offsetLeft 与 style.left、offsetWidth 与 style.width、offsetHeight 与 style.height 也是同样道理。

scrollHeight: 获取对象的滚动高度。
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置
event.clientX 相对文档的水平座标
event.clientY 相对文档的垂直座标

event.offsetX 相对容器的水平坐标
event.offsetY 相对容器的垂直坐标
document.documentElement.scrollTop 垂直方向滚动的值
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量

以上主要指IE之中,FireFox差异如下:

IE6.0、FF1.06+: 
clientWidth = width + padding 
clientHeight = height + padding 
offsetWidth = width + padding + border 
offsetHeight = height + padding + border 
IE5.0/5.5: 
clientWidth = width - border 
clientHeight = height - border 
offsetWidth = width 
offsetHeight = height

(需要提一下:CSS中的margin属性,与clientWidth、offsetWidth、clientHeight、offsetHeight均无关)
Javascript 相关文章推荐
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
Jun 28 Javascript
jQuery阻止事件冒泡具体实现
Oct 11 Javascript
javascript删除数组重复元素的方法汇总
Jun 24 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
Apr 23 Javascript
JavaScript中Number对象的toFixed() 方法详解
Sep 02 Javascript
BootStrap 可编辑表Table格
Nov 24 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
Mar 23 jQuery
Bootstrap框架建立树形菜单(Tree)的实例代码
Oct 30 Javascript
微信小程序收藏功能的实现代码
Jun 19 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
Jul 16 Javascript
vue实现同时设置多个倒计时
May 20 Vue.js
最新最全的手机号验证正则表达式
Feb 24 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
Aug 08 #Javascript
Jquery chosen动态设置值实例介绍
Aug 08 #Javascript
extjs两个tbar问题探讨
Aug 08 #Javascript
JS实现随机数生成算法示例代码
Aug 08 #Javascript
判断是否安装flash player及当前版本的JS代码
Aug 08 #Javascript
js 为label标签和div标签赋值的方法
Aug 08 #Javascript
JS模拟自动点击的简单实例
Aug 08 #Javascript
You might like
测试您的 PHP 水平的题目
2007/05/30 PHP
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
PHP基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
jQuery toggle()设置CSS样式
2009/11/05 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
js精度溢出解决方案
2012/12/02 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
JS实现状态栏跑马灯文字效果代码
2015/10/24 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
ES6下React组件的写法示例代码
2017/05/04 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
JavaScript模块详解
2017/12/18 Javascript
node后端服务保活的实现
2019/11/10 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
Python单体模式的几种常见实现方法详解
2017/07/28 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
python 录制系统声音的示例
2020/12/21 Python
html5清空画布方法(三种)
2017/10/16 HTML / CSS
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
软件测试常见笔试题
2012/02/04 面试题
遗嘱公证书标准样本
2014/04/08 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
张思德观后感
2015/06/09 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
创业计划书之废品回收
2019/09/26 职场文书
导游词之江南周庄
2019/12/06 职场文书
redis实现的四种常见限流策略
2021/06/18 Redis
mysql联合索引的使用规则
2021/06/23 MySQL
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers