offsetWidth, offsetHeight, offsetLeft, offsetTop,clientWidth, clientHeight,clientX,pageX,screenX
offsetWidth: 元素在水平方向上占用的空间大小。包括元素的宽度,内边距,(可见的)垂直滚动条的宽度,左右边框的宽度。
offsetHeight:元素在垂直方向上占用的空间大小,包括元素的高度,内边距,(可见的)水平滚动条的高度,上下边框的高度.
offsetLeft: 元素的左边框至包含元素的左内边框之间的像素距离
offsetTop: 元素的上边框至包含元素的上内边框之间的像素距离
offsetParent: 保存着包含元素的引用
注意:
1.当对象的offsetParent属性指向的是body时,offsetLeft和offsetTop指的是对象的边框(不包括边框)到页面边缘(即包含body的border的宽度,或高度)的距离。在FireFox中,会减去body的边框的宽度。
2.当对象的offsetParent属性指向的是最近的定位祖先元素时,offsetLeft和offsetTop指的是对象的边框(不包括边框)到最近的定位祖先元素的边框(不包括边框)的距离。在IE8中,会将最近的定位祖先元素的边框宽度和高度计算在内。
注意事项可由以下实例验证得:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>测试offsetLeft, offsetTop</title> <style>
* {
margin:0;
padding:0;
}
body {
margin-left:30px;
border:5px solid #000;
background:yellow;
height:350px;
}
.d {
float:left;
position:relative;
margin:20px;
padding:20px;
width:200px;
height:200px;
border:20px solid #000;
background:red;
overflow:auto;
}
.con {
float:left;
width:400px;
height:80px;
margin-left:25px;
border:10px solid blue;
background:green;
}
.zi {
float:left;
margin-top:20px;
width:200px;
height:300px;
}
</style>
<script>
(function(){
window.onload=function(){
var d=document.getElementById("d");
var con=document.getElementById("con");
var bo=document.getElementById("bo");
var zi=document.getElementById('zi');
zi.innerHTML="d.offsetTop="+d.offsetTop+"<br/>"+
"d.offsetLeft="+d.offsetLeft+"<br/>"+
"con.offsetTop="+con.offsetTop+"<br/>"+
"con.offsetLeft="+con.offsetLeft+"<br/>";
}
})();
</script>
</head> <body id="bo">
<div class="d" id="d">
<div class="con" id="con">
<a href="http://cyg7561.blog.163.com/" title="">test</a>
</div>
</div>
<div class="zi" id="zi"> </div>
</body>
</html>
clientWidth: 元素内容区宽度+左右内边距宽度( width + padding-left + padding-right )
clientHeight: 元素内容区高度+上下内边距高度(height + padding-top + padding-bottom)
注意:在window环境下IE中滚动条的宽度,高度为17px,FF ,chrome是21px, 在mac mini环境下,chrome, ff中滚动条的宽度都为15px;
scrollHeight: 主要用于确定元素内容的实际大小,在没有滚动条的情况下,元素内容的总高度
scrollWidth: 主要用于确定元素内容的实际大小,表示在没有滚动条的情况下,元素内容的总宽度
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>鬼眼邪神的博客</title>
<meta name="author" content="鬼眼邪神"/>
<meta name="description" content="鬼眼邪神的博客,http://cyg7561.blog.163.com/"/>
<style>
* {
margin:0;
padding:0;
}
body {
margin-left:30px;
border:5px solid #000;
background:yellow;
height:350px;
}
.d {
float:left;
position:relative;
margin:20px;
padding:20px;
width:200px;
height:200px;
border:20px solid #000;
background:red;
overflow:auto;
} .con {
float:left;
width:400px;
height:80px;
margin-left:25px;
border:1px solid blue;
background:green;
}
.zi {
float:left;
margin-top:20px;
width:200px;
height:300px;
}
</style>
<script>
(function(){
window.onload=function(){
// var d=document.getElementById("d");
// var con=document.getElementById("con");
// var bo=document.getElementById("bo");
var zi=document.getElementById('zi');
zi.innerHTML=
"d.clientWidth="+document.documentElement.clientWidth+"<br/>"+
"d.clientHeight="+document.documentElement.clientHeight+"<br/>"+
"d.scrollWidth="+document.documentElement.scrollWidth+"<br/>"+
"d.scrollHeight="+document.documentElement.scrollHeight+"<br/>";
;
} })();
</script>
</head> <body id="bo">
<div class="d" id="d">
<div class="con" id="con">
<a href="http://cyg7561.blog.163.com/" title="鬼眼邪神的博客">鬼眼邪神的博客</a>
</div>
</div>
<div class="zi" id="zi"> </div> <p style="border: 2px solid #ddd; width: 100px">测试</p>
</body>
</html>
以上代码是我用来测试当不包含滚动条的页面中取得页面clientHeight,clientWidth,scrollWidth, scrollHeight时,在各个浏览器中值得差异,根据测试所得,
在IE8,9,11,FF上clientWidth,clientHeight和scrollWidth,scrollHeight是相同的,大小都是代表文档内容区域的大小,而非适口的尺寸
但是在chrome中 scrollWidth,scrollHeight是等于视口大小,clientWidth,clientHeight等于文档内容区域的大小
而这一结论是和《高级程序设计》P324上的结论是相悖的,所以还是值得以后继续探究...
所以在跨浏览器的环境下面得到文档内容区域的大小,是必须要取得scrollWidth/clientWidth和scrollHeight/clientHeight中的最大值,即:
var docHeight = Math.max( document.documentElement.scrollHeight, document.documentElement.clientHeight);
var docWidht = Math.max( document.documentElement.scrollWidth, document.documentElement.clientWidth);
scrollTop: 被隐藏在内容区域上方的像素数,通过设置这个属性可以改变元素的滚动位置
scrollLeft: 被隐藏在内容区域左侧的像素数,通过设置这个属性可以改变元素的滚动位置
确定元素大小
getBoundingClientRect(): 返回包含4个属性:left, top, right, bottom的矩形对象。这些属性表示元素在页面中相对于视口的位置
/*
* 跨浏览器兼容getBoundingClientRect()方法
* ie8人为文档的左上角坐标是(2,2),其他浏览器包括IE9则将传统的(0,0)作为起点坐标
* 因此需要一开始检测下位于(0,0)出得元素位置
* 此方法用到arguments.callee,所以这个方法不能在严格模式下使用
*/
function getBoundingClientRect( elem ){ // 这个函数使用自身它自身的属性来确定是否要的坐标进行调整
if( typeof arguments.callee.offset != "number" ){
var scrollTop = document.documentElement.scrollTop;
var temp = document.createElement("div");
temp.style.cssText = "position: absolute; left: 0; top: 0";
document.body.append( temp );
// 之所以要减去视口的scrollTop,是为了防止调用这个函数时窗口被滚动
arguments.callee.offset = -temp.getBoundingClientRect().top -scrollTop;
document.body.removeChild( temp );
temp = null;
} var rect = element.getBoundingClientRect();
var offset = arguments.callee.offset; return{
left: rect.left + offset,
right: rect.right + offset,
top: rect.top + offset,
bottom: rect.bottom + offset
}
}
这个方法兼容IE, Firefox 3+, Safari 4+, Opera 9.5及Chrome;
Event对象定位相关的属性:
客户区坐标位置
event.clientX: 表示事件发生时鼠标指针在视口中的水平坐标,这个值不包括页面滚动的距离
event.clientY: 表示时间发生时鼠标指针在视口中的垂直坐标,这个值不包括页面滚动的距离
所有浏览器都支持这两个属性。
页面坐标位置:
event.pageX: 表示鼠标光标在页面中的位置,因此坐标是从页面本身而非视口的左边计算的
event.pageY: 表示鼠标光标在页面中的位置,因此坐标是从页面本身而非视口的顶端计算的
IE8及更早版本不支持事件对象上的页面坐标,不过使用客户区坐标和滚动信息可以计算出来。
var div = document.getElementById("mydiv");
addHandler( div, "click", function( event ){
event = event || window.event; var pageX = event.pageX;
var pageY = event.pageY; if( pageX === undefined ){
// document.body(混杂模式)||document.documentElement(标准模式)
pageX = event.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);
}; if( pageY === undefined ){
// document.body(混杂模式)||document.documentElement(标准模式)
pageY = event.clientY + (document.body.scrollTop || document.documentElement.scrollTop);
}; });
屏幕坐标位置:
event.screenX: 表示鼠标事件发生时,鼠标指针相对于整个电脑屏幕的横坐标的信息
event.screenY: 表示鼠标事件发生时,鼠标指针相对于整个电脑屏幕的横坐标的信息
offsetWidth, offsetHeight, offsetLeft, offsetTop,clientWidth, clientHeight,clientX,pageX,screenX的更多相关文章
- js的offsetWidth,offsetHeight,offsetLeft,offsetTop
js的offsetWidth,offsetHeight,offsetLeft,offsetTop
- 页面元素坐标和偏移(clientX/pageX/screenX/layerX/offsetWidth/scrollWidth/clientWidth等)相关整理
鼠标事件都是在特定位置发生的,我们可以通过event事件对象的各种属性来获得事件发生的坐标位置,有相对于视口的,有相对于整个文档的,同样页面元素的位置也有相对视口的,也有滚动后的,这些都比较容易混淆, ...
- 图解Js event对象offsetX, clientX, pageX, screenX, layerX, x区别
通过 3 张图和 1 张表格,轻松区别 JavaScript Event 对象中的offsetX, clientX, pageX, screenX, layerX, x等属性. 一.测试代码如下: & ...
- JS中的offsetWidth/offsetHeight/offsetTop/offsetLeft、clientWidth/clientHeight/clientTop/clientLeft、scrollWidth/scrollHeight/scrollTop/scrollLeft
这是一组非常容易弄混的参数!都是描述某个盒子元素的宽度.高度以及上或左的距离偏移量. 1. offsetWidth / offsetHeight(不包括外边距) offsetWidth:返回元素的宽度 ...
- clientX,pageX,screenX,offsetLeft,scrollTop
出处:点击打开链接 一直不太明白,今天看了一下,感觉挺详细,先转载过来....... clientX 观点:鼠标相对于WINDOWS的坐标. 这里这个WINDOWS是指我们能看见的浏览器大小.所以不可 ...
- event对象中offsetX,clientX,pageX,screenX的区别
1.offsetXoffset意为偏移量,是事件对象距左上角为参考原点的距离.以元素盒子模型的内容区域的左上角为参考点.不包括border.2.clientX事件对象相对于浏览器窗口可视区域的X,Y坐 ...
- 一张图看懂offsetX, clientX, pageX, screenX的区别
1.具体含义见下图1 2.浏览器的兼任情况
- style设置/获取样式的问题 和 offsetWidth/offsetHeight的问题
style设置/获取样式的问题:1.js通过style方法 --加样式:加的是行间样式 oDiv.style.width="20"+'px'; --取样式:取得是行间样 ...
- JavaScript--clientX,clientY、pageX,pageY、offsetLeft,offsetTop/offsetWidth,offsetHeight、scrollLeft,scrollTop/scrollWidth,scrollHeight、clientHeight,clientWidth区别
/*在事件的内部console.dir(event)*/ /** * 事件对象event * clientX/clientY 获取鼠标基于浏览器窗口(可视区域的坐标位置)全兼容 * * pageX/p ...
随机推荐
- 音乐TV2015校园招聘A第二大发行量(对中国科学院大学站)
标题叙述性说明:鉴于阵列A,尺寸n,数组元素1至n数位,但是,一些数字多次出现,有些数字不出现.请设计算法和程序.统计数据不会出现什么.什么号码多次出现. 您可以O(n)时间复杂度,O(1)求下完毕么 ...
- 根据Unix哲学来编写你的HTML5 Websocket服务器来实现全双工通信
websocketd代表WebSocket的守护进程 websocketd处理的是浏览器和服务器之间的WebSocket连接,它会启动你所指定的服务器端应用来对WebSockets进行处理,然后在浏览 ...
- POJ 3070 Fibonacci(矩阵高速功率)
职务地址:POJ 3070 用这个题学会了用矩阵高速幂来高速求斐波那契数. 依据上个公式可知,第1行第2列和第2行第1列的数都是第n个斐波那契数.所以构造矩阵.求高速幂就可以. 代码例如以下: #in ...
- asp.net中TextBox里面实现回车触发指定事件
原文:asp.net中TextBox里面实现回车触发指定事件 我在一个user_top用户控件里面做了个包括搜索的功能.然后再一个页面中添加这个用户控件.浏览时候在textbox里面输入搜索内容后.下 ...
- POJ 3928 & HDU 2492 Ping pong(树阵评价倒数)
主题链接: PKU:http://poj.org/problem?id=3928 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2492 Descript ...
- APP-随身听
简单到复杂听你的专属音响界,听金融.听物业,听新闻和其他节目专辑,简要介绍了新的音频应用,给你不一样的聆听体验.还记得老歌做?这里有.您留声机的一部分!很简单的音频应用,随时随地与此应用程序来听你的私 ...
- 【SSRS】入门篇(一) -- 创建SSRS项目
原文:[SSRS]入门篇(一) -- 创建SSRS项目 在本篇中,您将学习如何在 SQL Server Data Tools (SSDT) 中创建报表服务器项目. 报表服务器项目用于创建在报表服务器中 ...
- 无线连接手机进行Android测试
当每天走到哪都要拿一根数据线进行项目测试的时候,总是有一些焦急和烦躁的,如果能够无线连接测试就在好不过了. 这样不再是什么难事了,只需要几步走: 在进行无线连接测试的过程中,你的手机必须root了,这 ...
- 查看mysql状态常用命令
最近服务器上mysql有些奇奇怪怪的问题,可惜我不是专业的dba,为了加深自己对mysql的了解,先从基础的查看mysql状态命令看起吧. 命令: show status; 命令: show stat ...
- wcf的binding和host
----------------------------Binding绑定:定义:绑定表示通讯信道的配置:定义了客户端与服务端之间的协议:---传输协议:http.tcp.命名管道.msmq,自定义( ...