获取dom元素那些讨厌的位置封装代码


Posted in Javascript onJune 23, 2010

介绍
解决各个浏览器下 获取dom 元素的 位置
兼容性
ie 6 7 8 firefox 3.6 chrome 4.0 目前只测试了这几个浏览器
作者
Jelle · lu QQ:271412542 Email:idche@qq.com blogs:http://www.cnblogs.com/idche/
源码说明
jquery 源码给我很大帮助,也用到一个叫 布鲁斯 · 李 的同学的源码,当然更多资源来源于网络。
功能说明
// jelle(elem) 对象 elem传递对象ID 或者 dom对象 如果是窗口 传递 window 对象
//.offset() 返回当前对象相对浏览器的绝对位置 ,返回值 = {top:a,left:b};
//.inner() 返回当前对象可见区域 宽度与高度 ,返回值 = {wisth:a,left:b};
//.scroll() 返回当前对象被卷区top 和 left。 ,返回值 = {top:a,left:b};
//.offparent() 返回当前对象距离父节点的位置 top left。 ,返回值 = {top:a,left:b};
//.client() 返回当前对象的可用高度和宽度 ,返回值 = {width:a,height:b};
//.screen() 返回当前屏幕的可用高度和宽度 ,返回值 = {width:a,height:b};
//.mouse(event) 返回当前鼠标的x,y坐标,elem不为空返回相对elem的坐标 ,返回值 = {x:a,y:b};

例子
//例子: 返回一个ID 为 test 的div 的可见区域宽度 //jelle('test').inner().width //这里可以紧接后面直接下 width
基于jquery的源码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>无标题文档</title> 
<style type="text/css"> 
.jelle_box{ margin:10px; border:5px solid #000; padding:10px; overflow:scroll;} 
.o{height:100px;} 
.t{height:100px;} 
.h{height:100px;} 
#jieshao li{ white-space:pre;} 
#jieshao li li{ padding:0; margin:0;} 
</style> 
</head> 
<script type="text/javascript" src="jquery-1.4.2.js"></script> 
<body> 
<dl> 
<dt>介绍</dt> 
<dd>解决各个浏览器下 获取dom 元素的 位置</dd> 
<dd>兼容性</dd> 
<dd>ie 6 7 8 firefox 3.6 chrome 4.0 目前只测试了这几个浏览器 </dd> 
<dt>作者</dt> 
<dd>Jelle · lu QQ:271412542 Email:idche@qq.com blogs:http://www.cnblogs.com/idche/</dd> 
<dt>源码说明</dt> 
<dd>jquery 源码给我很大帮助,也用到一个叫 布鲁斯 · 李 的同学的源码,当然更多资源来源于网络。</dd> 
<dt>功能说明</dt> 
<dd> 
<ul id="jieshao"> 
<li>// jelle(elem) 对象 elem传递对象ID 或者 dom对象 如果是窗口 传递 window 对象</li> 
<li>//.offset() 返回当前对象相对浏览器的绝对位置 ,返回值 = {top:a,left:b};</li> 
<li>//.inner() 返回当前对象可见区域 宽度与高度 ,返回值 = {wisth:a,left:b};</li> 
<li>//.scroll() 返回当前对象被卷区top 和 left。 ,返回值 = {top:a,left:b};</li> 
<li>//.offparent() 返回当前对象距离父节点的位置 top left。 ,返回值 = {top:a,left:b};</li> 
<li>//.client() 返回当前对象的可用高度和宽度 ,返回值 = {width:a,height:b};</li> 
<li>//.screen() 返回当前屏幕的可用高度和宽度 ,返回值 = {width:a,height:b};</li> 
<li>//.mouse(event) 返回当前鼠标的x,y坐标,elem不为空返回相对elem的坐标 ,返回值 = {x:a,y:b}; 
</li> 
</ul> 
</dd> 
<dt>例子</dt> 
<dd>//例子: 返回一个ID 为 test 的div 的可见区域宽度 
//jelle('test').inner().width 
//这里可以紧接后面直接下 width</dd> 
</dl> 
<textarea id="jelle_code" style="width:300px; height:50px;">jelle('t').offset().top</textarea> 
<input type="button" value="运行代码" onclick="alert(eval(document.getElementById('jelle_code').value))" /> 
<div class="jelle_box o" id="o"> 
div.id=o 
<div class="jelle_box t" id="t"> 
div.id=t 
<br/> 
<br/> 
<div class="jelle_box h" id="h">div.id=h <br>OK 这里是一个测试的地方。他包含3个DIV嵌套<br/><br/><br/><br/></div><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> 
</div> 
<br/><br/><br/><br/> 
</div> 
<script type="text/javascript"> 
//****介绍 
//解决各个浏览器下 获取dom 元素的 位置 
//****兼容性 
// ie 6 7 8 firefox 3.6 chrome 4.0 目前只测试了这几个浏览器 
//*****作者 
// Jelle · lu QQ:271412542 Email:idche@qq.com blogs:http://www.cnblogs.com/idche/ 
//*****源码说明 
// jquery 源码给我很大帮助,当然更多资源来源于网络。 
//*****功能说明 
// jelle(elem) 对象 elem传递对象ID 或者 dom对象 如果是窗口 传递 window 对象 
//.offset() 返回当前对象相对浏览器的绝对位置 ,返回值 = {top:a,left:b}; 
//.inner() 返回当前对象可见区域 宽度与高度 ,返回值 = {wisth:a,left:b}; 
//.scroll() 返回当前对象被卷区top 和 left ,返回值 = {top:a,left:b}; 
//.offparent() 返回当前对象距离父节点的位置 top left ,返回值 = {top:a,left:b}; 
//.client() 返回当前对象的可用高度和宽度 ,返回值 = {width:a,height:b}; 
//.screen() 返回当前屏幕的可用高度和宽度 ,返回值 = {width:a,height:b}; 
//.mouse(event) 返回当前鼠标的x,y坐标 ,返回值 = {x:a,y:b}; 
//*****例子 
//例子: 返回一个ID 为 test 的div 的可见区域宽度 
//jelle('test').inner().width 
//这里可以紧接后面直接下 width 
var jelle=function(elem){ 
// sys 浏览器判断 
var sys=(function(){ 
var sys={},ua=navigator.userAgent.toLowerCase(); 
//sys.firefox= ua.match(/firefox\/([\d\.]+)/) || false; //后面没有用到所以注销掉 
sys.ie= ua.match(/msie\s([\d\.]+)/) || false; 
//sys.chrome= ua.match(/chrome\/([\d\.]+)/) || false; //后面没有用到所以注销掉 
return sys; 
})(), 
comStyle=function(obj){ 
return window.getComputedStyle ? window.getComputedStyle(obj, null) : obj.currentStyle; 
}, 
// elem 当前对象 window or other object 
elem= typeof elem === 'string' ? document.getElementById(elem) : 
elem === undefined ? window : elem, 
isie=/^6.0|7.0|8.0$/.test(sys.ie[1]),//是否IE 浏览器 
isie67=/^6.0|7.0$/.test(sys.ie[1]), 
db=document.body, 
dd=document.documentElement, 
_this={}; 
//对象距离浏览器对0 0点的距离 
_this.offset=function(o){ 
//感谢 糖粒子 告诉我这个方法 
//有了这个方法至少省略了 15行代码 
return (o?o:elem).getBoundingClientRect(); 
} 
//当前对象可见区域的宽 高 window 
_this.inner=function(){ 
var width,height; 
//not window object 
if ( elem !== window ) { 
var computedStyle=comStyle(elem); 
width=elem.offsetWidth; 
height=elem.offsetHeight; 
//isie=/^6.0|7.0|8.0$/.test(sys.ie[1]), 
if( isie ){ 
width-=parseInt(computedStyle.marginTop) || 0; 
height-=parseInt(computedStyle.marginLeft) || 0; 
}else{ 
width-=parseInt(computedStyle.paddingTop) || 0; 
height-=parseInt(computedStyle.paddingLeft) || 0; 
} 
} else{ 
// window 需要区分浏览器 
//isie=/^6.0|7.0|8.0$/.test(sys.ie[1]), 
if ( isie ){ 
width=dd.offsetWidth; 
height=dd.offsetHeight; 
}else{ 
//当前elem=window 
width=elem.innerWidth; 
height=elem.innerHeight; 
} 
} 
// 返回的数据格式{width:a,height:b} 
return {'width':width,'height':height}; 
} 
//获取对象滚动条卷去的距离 
_this.scroll=function(o){ 
var _elem = o ? o : elem,top,left; 
if( _elem === window){ 
top=db.scrollTop+dd.scrollTop; 
left=db.scrollLeft+dd.scrollLeft; 
}else{ 
top=_elem.scrollTop || 0; 
left=_elem.scrollLeft || 0; 
} 
return { 'top':top , 'left':left }; 
} 
//获取对象距离父节点的 位置 
_this.offparent=function(){ 
return {'top':_this.offset(elem).top - _this.offset(elem.parentNode).top, 
'left':_this.offset(elem).left - _this.offset(elem.parentNode).left 
}; 
} 
//当前对象的可用高度与宽度 
_this.client=function(){ 
return elem==window ? {'width':db.clientWidth,'height':db.clientHeight} : 
{'height':elem.scrollWidth,'height':elem.scrollHeight}; 
} 
//屏幕可用工作区宽度高度 
_this.screen=function(){ 
return {'width':window.screen.availWidth,'height':window.screen.availHeight,} 
} 
//获取当前鼠标的位置 
_this.mouse=function (e){//获取鼠标坐标 请传递evnet参数 
var e = window.event || e, 
p=(e.pageX || e.pageY)?{ x:e.pageX, y:e.pageY } : 
{ x:e.clientX + db.scrollLeft - db.clientLeft, y:e.clientY + db.scrollTop - db.clientTop }; 
return elem === window ? p : 
{x:p.y - _this.offset().top, y:p.x - _this.offset().left}; 
} 
return _this; 
} 
</script> 
</body> 
</html>
Javascript 相关文章推荐
做网页的一些技巧(续)
Feb 01 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
Mar 25 Javascript
javascript new后的constructor属性
Aug 05 Javascript
JavaScript中Boolean对象的属性解析
Oct 21 Javascript
使用three.js 画渐变的直线
Jun 05 Javascript
JavaScript仿flash遮罩动画效果
Jun 15 Javascript
JS实现根据文件字节数返回文件大小的方法
Aug 02 Javascript
javascript 将共享属性迁移到原型中去的实现方法
Aug 31 Javascript
Vue.js实现一个todo-list的上移下移删除功能
Jun 26 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
Nov 15 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
Mar 01 Javascript
微信小程序JS加载esmap地图的实例详解
Sep 04 Javascript
jquery ajax 同步异步的执行示例代码
Jun 23 #Javascript
jquery tab插件制作实现代码
Jun 22 #Javascript
jquery多浏览器捕捉回车事件代码
Jun 22 #Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
Jun 21 #Javascript
在IE6下发生Internet Explorer cannot open the Internet site错误
Jun 21 #Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
Jun 21 #Javascript
js操作时间(年-月-日 时-分-秒 星期几)
Jun 20 #Javascript
You might like
php操作MongoDB类实例
2015/06/17 PHP
php基本函数汇总
2015/07/09 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
PDO::getAttribute讲解
2019/01/28 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
js 操作select相关方法函数
2009/12/06 Javascript
匹配任意字符的正则表达式写法
2010/04/29 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
Nodejs处理异常操作示例
2018/12/25 NodeJs
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
Python编程中的反模式实例分析
2014/12/08 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
python实现简单加密解密机制
2019/03/19 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
招商专员岗位职责
2014/02/08 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
《初涉尘世》读后感3篇
2020/01/10 职场文书
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js
小程序实现侧滑删除功能
2022/06/25 Javascript