javascript中offset、client、scroll的属性总结


Posted in Javascript onAugust 13, 2015

HTML元素有几个offset、client、scroll开头的属性,总是让人摸不着头脑。在书中看到记下来,分享给需要的小伙伴。主要是以下几个属性:

第一组:offsetWidth,offsetHeight,offsetLeft,offsetTop,offsetParent

   第二组:clientWidth,clientHeight,clientLeft,clientTop

第三组:scrollWidth,scrollHeight,scrollLeft,scrollTop

详细定义如下:

1.1 HTML元素的offsetWidth,offsetHeight以CSS像素返回它的屏幕尺寸,包含元素的边框和内边距,不包含外边距。

1.2 offsetLeft和offsetTop属性返回元素的X和Y坐标。通常,它们返回值即是文档坐标。但对于已定位元素的后代元素和一些其他元素(如表格单元),这些属性返回的坐标是相对于祖先元素的而非文档。

1.3 offsetParent属性指定offsetLeft,offsetTop相对的父元素。如果offsetParent为null,后两者的返回值则为文档坐标。因此一般来说,用offsetLeft和offsetTop来计算元素e的位置需要一个循环:

//计算元素的文档坐标
function getElementPosition(e){
  var x=0,y=0;
  while(e !=null){
    x +=e.offsetLeft;
    y +=e.offsetTop;
    e=e.offsetParent; 
  }
  return {x:x, y:y} ;  
}

该方法计算的位置也不总是正确的,推荐使用内置的getBoundingClientRect()方法。

2.1 clientWidth和clientHeight类似于offsetWidth和offsetHeight属性,不同的是它们不包含边框大小,只包含内容和内边距。同时,如果浏览器在内边距和边框之间添加了滚动条,clientWidth和clientHeight的返回值也不包含滚动条。注意,对于类型<i>,<code>和<span>这些内联元素,clientWidth和clientHeight总是返回0。

2.2 clientLeft和clientTop返回元素的内边距的外边缘和它的边框的外边缘之间的水平距离和垂直距离,通常这些值就等于左边和上边的边框宽度。但是如果元素有滚动条,并且浏览器将这些滚动条旋转在左侧或顶部,他们就还包含了滚动条的宽度。对于内联元素,它们总是为0。通常clientLeft和clientTop用处不大。

3.1 scrollWidth和scollHeight是元素的内容区域加上它的内边距再加上任何溢出内容的尺寸。当内容正好和内容区域匹配而没有溢出时,这些属性与clientWidth和clientHeight是相等的。但当溢出时,它们就包含溢出的内容,返回值比clientWidth和clientHeight要大。

3.2 scrollLeft和scrollTop指定元素的滚动条的位置。注意,scrollLeft和scrollTop是可写的,通过设置它们来让元素中的内容滚动(HTML元素并没有类似Window对象的scrollTo()方法)。

obj.offset[WidthHeightTopLeft]  取控件相对于父控的位置
event.offset[XY] 取鼠标相在触发事件的控件中的坐标
event.screen[XY] 鼠标相对于屏幕坐标
event.client[XY] 鼠标相对于网页坐标在在
obj.scroll[WidthHeightTopLeft] 获取对象滚动的大小
obj.client[WidthHeightTopLeft] 获取对象可见区域的大小

<!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=gb2312" />
<title>无标题文档</title>
<style type="text/css">
<!--
div{
font-family: "宋体";
font-size: 12px;
color: #000000;
}
#div1{
position:absolute;
background-color:#f0f0f0;
width:200px;
height:200px;
left:20px;
top:0px;
z-index:1;
}
#div2{
background-color:#cfc0cf;
width:200px;
height:210px;
position:absolute;
left:261px;
top:347px;
z-index:100;
}
#div3{
background-color:#abbfbf;
width:200px;
height:200px;
position:absolute;
left:20px;
top:247px;
z-index:100;
}
#div4{
background-color:#cfcfcf;
width:200px;
height:200px;
position:absolute;
left:461px;
top:147px;
z-index:100;
}
-->
</style>
</head>
<body>
<div id='div1' >offset 控件相对于父窗体的位置</div>
<script>
function offset(ids){
ids.innerHTML="offsetLeft ="+ids.offsetLeft+"<BR>";
ids.innerHTML+="offsetWidth ="+ids.offsetWidth+"<BR>";
ids.innerHTML+="offsetHeight ="+ids.offsetHeight+"<BR>";
ids.innerHTML+="offsetTop ="+ids.offsetTop+"<BR>";
ids.innerHTML+="event.offset 鼠标相对于控件的位置<BR>";
ids.innerHTML+="offsetX ="+event.offsetX+"<BR>";
ids.innerHTML+="offsetY ="+event.offsetY+"<BR>";
}
function screen(ids){
ids.innerHTML="scrollWidth ="+ids.scrollWidth+"<BR>";
ids.innerHTML+="scrollHeight ="+ids.scrollHeight+"<BR>";
ids.innerHTML+="scrollTop ="+ids.scrollTop+"<BR>";
ids.innerHTML+="scrollLeft ="+ids.scrollLeft+"<BR>";
}
function client(ids){
ids.innerHTML="clientWidth ="+ids.clientWidth+"<BR>";
ids.innerHTML+="clientHeight ="+ids.clientHeight+"<BR>";
ids.innerHTML+="clientTop ="+ids.clientTop+"<BR>";
ids.innerHTML+="clientLeft ="+ids.clientLeft+"<BR>";
}
function eventc(ids){
ids.innerHTML="鼠标相对于屏幕坐标<BR>event.screenX="+event.screenX+"<BR>";
ids.innerHTML+="event.screenY ="+event.screenY+"<BR>";
ids.innerHTML+="鼠标相对于网页坐标event.clientX="+event.clientX+"<BR>";
ids.innerHTML+="event.clientY ="+event.clientY+"<BR>";
}
</script>
</body>
</html>

各浏览器都有这些属性,有些值可能不一样。

自己写代码,对比一下结果,就明白了。

Javascript 相关文章推荐
jquery 实现窗口的最大化不论什么情况
Sep 03 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
js出生日期 年月日级联菜单示例代码
Jan 10 Javascript
基于JavaScript实现移动端TAB触屏切换效果
Oct 20 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
Dec 28 Javascript
js实现文字跑马灯效果
Feb 23 Javascript
从零学习node.js之express入门(六)
Feb 25 Javascript
BootStrap中Table隐藏后显示问题的实现代码
Aug 31 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
Jan 09 jQuery
vue自定义表单生成器form-create使用详解
Jul 19 Javascript
解决layui table表单提示数据接口请求异常的问题
Sep 24 Javascript
微信小程序实现聊天室
Aug 21 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
Aug 13 #Javascript
asp.net中oracle 存储过程(图文)
Aug 12 #Javascript
JavaScript的jQuery库插件的简要开发指南
Aug 12 #Javascript
JavaScript中的call方法和apply方法使用对比
Aug 12 #Javascript
详细解读JavaScript的跨浏览器事件处理
Aug 12 #Javascript
基于jQuery实现动态数字展示效果
Aug 12 #Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 #Javascript
You might like
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
Javascript 强制类型转换函数
2009/05/17 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
js中作用域的实例解析
2017/03/16 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
python检测远程服务器tcp端口的方法
2015/03/14 Python
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
在服务器上安装python3.8.2环境的教程详解
2020/04/26 Python
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
财会自我鉴定范文
2013/12/27 职场文书
安全标准化汇报材料
2014/02/03 职场文书
小学敬老月活动方案
2014/02/11 职场文书
毕业自我鉴定书
2014/03/24 职场文书
高中同学会活动方案
2014/08/14 职场文书
财会专业大学生求职信
2014/09/26 职场文书
见习报告格式要求
2014/11/04 职场文书
人事局接收函
2015/01/31 职场文书
一般纳税人申请报告
2015/05/18 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技