scrollTop,scrollHeight,clientTop,clientHeight,offsetTop,offsetHeight实际意义 及 计算方式 附实例说明
一、滚动距离、高度 scrollTop scrollLeft scrollHeight scrollWidth
二、相对位置、距离 offsetTop offsetLeft offsetHeight offsetWidth
三、可视距离、宽高 clientTop clientLeft clientHeight clientWidth
event.clientX event.clientY event.pageX event.pageY
event.offsetX event.offsetY event.layerX event.layerY
screenLeft screenTop screenX screenY
e.pageX e.pageY e.clientX e.clientY
一.滚动距离、高度
1.对象滚动条上面和左边折卷的距离(即浏览器滚动条滚动后顶部和左部被隐藏的页面内容像素)
javascript
document.documentElement.scrollTop//firefox
document.documentElement.scrollLeft//firefox
document.body.scrollTop//IE
document.body.scrollLeft//IE
jquery
$(window).scrollTop()
$(window).scrollLeft()
2.滚动对象元素的实际内容宽高,不含边框,包括被卷去看不见的部分。
javascript
document.body.scrollWidth //IE
document.body.scrollHeight //IE
document.documentElement.scrollWidth //firefox
document.documentElement.scrollHeight //firefox
jquery
无相关写法,但可获取同等高度
二.相对位置、距离
1.元素相对 最近有定位属性的父级元素 顶端和左边的偏移值 如果没有定位属性,默认为window
javascript
DOM元素对象.offsetTop //IE firefox
DOM元素对象.offsetLeft //IE firefox
jquery
jq对象.offset().top;
jq对象.offset().left;
2.元素本身的高度
javascript
obj.offsetWidth //obj元素的宽度 offsetWidth = width + padding + border
obj.offsetHeight //obj元素的高度 offsetHeight = width + padding + border
jquery
$(obj).outerHeight() //参数设为true 包括margin
$(obj).outerWidth() //参数设为true 包括margin
补充:$(obj).height() //不包括padding,border,margin
$(obj).innerHeight() //包括padding,不包括border,margin
三.可视距离、宽高
1.网页工作区域的高度和宽度(可见区域的宽度和高度)
javascript
document.documentElement.clientHeight; //IE firefox clientHeight = height + padding
document.documentElement.clientWidth; //IE firefox clientWidth = width + padding
jquery
$(window).innerHeight();
$(window).innerWidth();
2.元素周围边框的厚度
clientLeft //左边框的宽度
clientTop //右边框的宽度
四.坐标位置
1.相对文档
IE event.clientX event.clientY
firefix event.pageX event.pageY
2.相对容器
IE event.offsetX event.offsetY
firefox event.layerX event.layerY
3.获取浏览器在电脑屏幕中的位置
x=window.screenLeft || screenX;
y=window.screenTop || screenY;
4.获取鼠标在浏览器中的位置
$(obj).mousemove(function(e){
var x=e.pageX; // 这就是鼠标的x坐标 e.clientX也可以
var y=e.pageY; // 这就是鼠标的y坐标
})
5.获取鼠标在容器中的坐标
document.getElementById('box').onclick=function(e){
var x=e.offsetX || layerX; 这就是鼠标的x坐标
var y=e.offsetY || layerY; 这就是鼠标的y坐标
}
五.例子
1.css
.outer{
overflow:auto;
border:1px solid #;
height:300px;
width:300px;
padding:50px;
margin:0px;
}
.inner{
height:800px;
width:600px;
border:5px solid #;
}
2.dom
<div id="testDiv" class="outer">
<div class="inner"></div>
</div>
<div id="result" style="top:420px;left:20px;position:fixed;">
3.js
$(function(){
var element = document.getElementById("testDiv");
$(element).scroll(function(){
var str = "<div><span>滚动到最底端时:scrollTop+clientHeight=scrollHeight___</span>scrollTop:"+element.scrollTop
+"</div><div><span>滚动到最右端时:scrollLeft+clientWidth=scrollWidth___</span>scrollLeft:"+element.scrollLeft
+"</div><div><span>content(内部元素的实际高度)+padding-top___</span>scrollHeight:"+element.scrollHeight
+"</div><div><span>content(内部元素的实际宽度)+padding-left___</span>scrollWidth:"+element.scrollWidth
+"<br/><br/><div><span>相对最近有定位属性的父级元素 顶端的偏移___</span>offsetTop:"+element.offsetTop
+"</div><div><span>相对最近有定位属性的父级元素 左边的偏移___</span>offsetLeft:"+element.offsetLeft
+"</div><div><span>border+padding+content___</span>offsetHeight:"+element.offsetHeight
+"</div><div><span>border+padding+content___</span>offsetWidth:"+element.offsetWidth
+"<br/><br/><div><span>border-top___</span>clientTop:"+element.clientTop
+"</div><div><span>border-left___</span>clientLeft:"+element.clientLeft
+"</div><div><span>content+padding-滚动条的宽度___</span>clientHeight:"+element.clientHeight
+"</div><div><span>content+padding-滚动条的宽度___</span>clientWidth:"+element.clientWidth
+"</div>";
$("#result").html(str);
});
});
4.结果
结果说明:
滚动过程中,scrollTop和scrollLeft的值会变化。
//实际内容占的实际高度
scrollHeight = 810(inner 的 height+border)+50(outer 的 padding-top)。
offsetTop和offsetLeft为8px是浏览器的默认像素,此处指outer元素相对window的偏移。
//实际所占位置大小 包括border 不包括 margin
offsetHeight outer元素实际占位置的height outer 的 content+padding+border
clientTop outer的上边框
clientLeft outer的左边框
//实际可见区域
clientHeight outer的 content height+padding - 滚动条的宽度
clientWidth outer的 content width+padding - 滚动条的宽度


(本文供学习交流,欢迎大家共同讨论)
scrollTop,scrollHeight,clientTop,clientHeight,offsetTop,offsetHeight实际意义 及 计算方式 附实例说明的更多相关文章
- scrollHeight、clientHeight、offsetHeight、scrollTop等的定义以及图解
开发中经常遇到使用scrollHeight.scrollTop.clientHeight.offsetHeight等的情况,网上有众多关于这些属性的解释,但是并不全面和直观,现在将这些属性结合图例整理 ...
- 关于offsetTop offsetHeight clientHeight scrollHeight scrollTop的区别研究
我是以chrome浏览器做的研究. 先看一段代码: <script> window.addEventListener('DOMContentLoaded',function(){ var ...
- jquery 对象的 height、innerHeight、outerHeight 的区别以及DOM 元素的 clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop
前言:jquery 对象的 height.innerHeight.outerHeight,还有 DOM 元素的 clientHeight.offsetHeight.scrollHeight.offse ...
- offsetTop/offsetHeight scrollTop/scrollHeight 的区别
offsetTop/offsetHeight scrollTop/scrollHeight 这几个属性困扰了我N久,这次一定要搞定. 假设 obj 为某个 HTML 控件. obj.offset ...
- clientTop、offsetTop和scrollTop的区分
页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offse ...
- 各种位置和高度计算:.position()、.offset()、.outerHeight()、.scrollTop、.scrollHeight、.clientHeight
1..position()和.offset() jquery的.position()获取相对于最近的position为relative或absolute的父元素的偏移,返回.position().le ...
- 四种浏览器对 clientHeight、offsetHeight、scrollHeight、clientWidth、offsetWidth 和 scrollWidth 的解释差异
网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...
- 详解clientHeight、offsetHeight、scrollHeight
关于clientHeight.offsetHeight.scrollHeight window.screen.availWidth 返回当前屏幕宽度(空白空间) window.screen.av ...
- height、clientHeight、offsetHeight、scrollHeight、height()、 innerHeight()、outerHeight()等的区别
1.height height是css属性,这个属性定义元素内容区的高度,在内容区外面可以增加内边距.边框和外边距. 当 box-sizing: content-box 时,高度应用到元素的内容框. ...
随机推荐
- 论文deadline 最后三天
2015.12.29 星期二 内容整改 2015.12.30 星期三 参考文献,摘要等 2015.12.31 星期四 最后修改 尽最大的努力去做好论文的事情.
- 关于 实体类中 时间字段 为string 类型和 datatime类型 比较
经发现, 数据库中保存时间格式数据 可以正常 排序, 数据中保存时间格式字符串 排序出现问题 /// <summary> /// 修改时间 /// </summary> pu ...
- 一篇入门AngularJS
目录 1.AngularJS 应用 2.AngularJS 指令 3.AngularJS 表达式 4.AngularJS 模型 5.AngularJS 控制器 6.AngularJS 作用域 7.An ...
- 32.修改IK分词器源码来基于mysql热更新词库
主要知识点, 修改IK分词器源码来基于mysql热更新词库 一.IK增加新词的原因 在第32小节中学习到了直接在es的词库中增加词语,来扩充自已的词库,但是这样做有以下缺点: (1)每次添加完 ...
- Laravel-Action 对代码的改造
前言 以往写过俩篇文章[积德篇] 如何少写PHP "烂"代码 https://segmentfault.com/a/11...举枪消灭"烂代码"的实战案例 ht ...
- springcloud(四):Eureka客户端公共组件打包方式
, 一.前言 各位大佬应该知道,在大型项目中都需要有数据传输层,一般项目都采用的是MVC结构,如果有10个表,则会创建10个实体类,在各个层之间应该使用实体类传递数据: 在微服架构中,也许 ...
- Ac自动机基础题集合
Ac_automaton的板子打熟以后发现碰到题不会做,而且还是比较纯的板子,只要改几处地方就可以,Ac_automation有许多优秀而fantasy的性质,下面粘几个题,来记录一下做题的心得. 1 ...
- 【Codeforces 158B】Taxi
[链接] 我是链接,点我呀:) [题意] 每辆车可以载重4个人. 一共有n个组,每个组分别有s[i]个人. 要求每个组的人都在同一辆车里面. 问最少需要多少辆车 [题解] 将每个组的人数从小到大排序. ...
- [bzoj3872][Poi2014]Ant colony_树形dp
Ant colony bzoj-3872 Poi-2014 题目大意:说不明白.....题目链接 注释:略. 想法:两个思路都行. 反正我们就是要求出每个叶子节点到根节点的每个路径权值积. 可以将边做 ...
- F2BPM作流引擎系列索引
索引如下 F2工作流引擎遵循参考WFCM标准规范,符合中国国情特色,更轻量级的工作流引擎,支持多种数据库(mmsqlserver,mysql,oracle),有强大智能的组织模型接口可快速应用到任何基 ...