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 相关文章推荐
JavaScript中的运算符种类及其规则介绍
Sep 26 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
Jun 01 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
Vue resource中的GET与POST请求的实例代码
Jul 21 Javascript
JS处理一些简单计算题
Feb 24 Javascript
vue双向数据绑定知识点总结
Apr 18 Javascript
vue使用监听实现全选反选功能
Jul 06 Javascript
postman自定义函数实现 时间函数的思路详解
Apr 17 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
May 02 Javascript
微信小程序发布新版本时自动提示用户更新的方法
Jun 07 Javascript
javascript中的with语句学习笔记及用法
Feb 17 Javascript
javascript canvas实现简易时钟例子
Sep 05 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获取数组中重复数据的两种方法
2013/06/28 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
JS 分号引起的一段调试问题
2009/06/18 Javascript
js调用图片隐藏&amp;显示实现代码
2013/09/13 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
python求pi的方法
2014/10/08 Python
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
python实现京东秒杀功能
2018/07/30 Python
如何基于python生成list的所有的子集
2019/11/11 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
PyTorch-GPU加速实例
2020/06/23 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
大学生演讲稿范文
2014/01/11 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
志愿者活动总结范文
2014/04/26 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
Win11如何查看显卡型号 Win11查看显卡型号的方法
2022/08/14 数码科技