offset/client/scroll一些总结

1.offset

首先offset共有五个值

1.offsetParent

2.offsetTop

3.offsetLeft

4.offsetWidth

5.offsetHeight

先看代码示例:

<!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>
</head>
<style type="text/css">
body{
border:10px solid blue;
margin:10px;
padding:10px;
background:#eee;
}
#show{
width:400px;
height:200px;
background:green;
border:10px solid red;
padding:10px;
color:white;
}
</style>
<script type="text/javascript"> window.onload=function (){
var obj=document.getElementById("show");
obj.innerHTML="<p>Browser:"+window.navigator.userAgent+"</p>"+
"<p>offsetWidth:"+obj.offsetWidth+"</p>"+
"<p>offsetHeight:"+obj.offsetHeight+"</p>"+
"<p>:offsetLeft"+obj.offsetLeft+"</p>"+
"<p>:offsetTop"+obj.offsetTop+"</p>"; }
</script>
</head> <body>
<div id="show"></div>
</body>

效果图;

1.offset-width和offset-heigh

不难发现(offset-width和offset-height),除了ie7以外,其他的值都是一样的。

总结:offsetWidth与offsetHeight有个特点,就是这两个属性的值只与该元素有关(也就是说与定位哪些无关)

      offsetWidth=(border-width)*2+(padding-left)+(width)+(padding-right)

  offsetHeight=(border-width)*2+(padding-top)+(height)+(padding-bottom)

说白了,offsetwidth(height)其实求的就是元素的盒子模型width(height)值;

ps:为什么ie7下的会少一个px呢(等哈在讨论)

2.offsetTop和offLeft

  这两个值就涉及到定位的问题;

代码:

<!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>
</head>
<style type="text/css">
#outer{
width:200px;
height:200px;
background:green;
position:relative;
color:white; }
#inner{
height:50px;
margin-left:40px;
width:50px;
background:blue;
border:10px solid gray;
position:absolute;
left:10px;
padding-left:10px;
}
</style>
<script type="text/javascript"> window.onload=function (){
var obj=document.getElementById("inner");
obj.innerHTML=obj.offsetLeft; }
</script>
</head> <body>
<div id="outer">
<div id="inner"></div>
</div>
</body>

 效果:

结论:

   定义:返回对象元素边界的左上角顶点相对于offsetParent的左上角顶点的水平偏移量

   当有定位的情况下:

   从这个定义中我们可以明确地知道offsetLeft与当前元素的margin-left和offsetParent的padding-left有关。

在这里我们发现:(默认的参照物体是offsetParent)

offsetLeft=left+margin-left,其中padding-left在此处没有效果

ps:当我们使用absolue(relative)进行定位之后,我们直接使用left,就可以是精确,方便的定位了,一般不会再用到margin-left

或者padding-left来控制元素的位置 了滴呀;所以大多数情况下offsetLeft就等于left的值滴呀

  当没有定位的情况下

  默认参照的物体就是我们的body(也可以理解成我们浏览器窗口)这个时候:

如果理解成body

offsetLeft=body的margin-left,padding-left,

如果理解成浏览器窗口

offsetleft=元素相对浏览器窗口左边的距离

3.offsetParent(涉及到定位的知识)

  offsetParent属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),并且是已进行过CSS定位的容器元素。 如果这个容器元素未进行CSS定位, 则offsetParent属性的取值为根元素的引用。

  总的来说两条规则:

  1、如果当前元素的父级元素没有进行CSS定位(position为absolute或relative),offsetParent为body。

  2、如果当前元素的父级元素中有CSS定位(position为absolute或relative),offsetParent取最近的那个父级元素。

4.clientwidth和clientHeight

   这里来两个属性,比较好理解,指定的就是可视区域的宽度和高度。

5.scrollTop和scrollLeft

这个是用于,当出现滚动条的时候,获取被卷曲的高度和宽度。

offset/client/scroll一些总结的更多相关文章

  1. JavaScript中的 offset, client,scroll

    在js 中我们要用到的 offset, client, scroll 在这我把自己理解的给大家分享一下. offset div.offsetTop 指div距离上方或上层控件的距离,单位像素 div. ...

  2. js中 offset /client /scroll总结

    offset家族(只能读取,不能操作): offsetLeft:元素的边框的外边缘距离与已定位的父容器(offsetparent)的左边距离(就是子元素左边框到父元素左边框的距离). offsetTo ...

  3. js 元素offset,client , scroll 三大系列总结

    1,element.offsetWidth : 包括 padding 和 边框 2,element.clientWidth : 包括 padding ,不包含边框 , 内容超出会溢出盒子的时候,就用s ...

  4. offset client scroll

    offsetHeight offsetWidth返回为元素在屏幕上显示大小,不包括外边距 clientHeight clientWidht 和上面两个类似,不同的是,这两个不包括外边距高度. < ...

  5. bom中的offset,client,scroll

    简单明了

  6. JS 中的offset、scroll、client总结

    经常碰到offset.scroll.client这几个关键字,每次都要各种实验,这里总结一下. 两张图镇楼,随时翻阅 1. offset offset 指偏移,包括这个元素在文档中占用的所有显示宽度, ...

  7. client/scroll/offset width/height/top/left ---记第一篇博客

    client/scroll/offset width/height/top/left (盒模型为contentBox,定位原点是元素左上角边框最外层的交点) clientWidth  width+左p ...

  8. javascript中常用坐标属性offset、scroll、client

    原文:javascript中常用坐标属性offset.scroll.client 今天在学习js的时候觉得这个问题比较容易搞混,所以自己画了一个简单的图,并且用js控制台里面输出测试了下,便于理解. ...

  9. 三大家族(offset、scroll、client)

    offset.scroll.client三大家族 offset家族 offsetWidth 与 offsetHeight offset 偏移 用于获取元素自身的位置和大小 offsetWidth和of ...

随机推荐

  1. 【BZOJ】3039: 玉蟾宫(DP/单调栈)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3039 每次看到我的提交都有点淡淡的忧伤T_T.. 看到此题我想到用前缀和维护点ij向左和向上能拓展的 ...

  2. FreeMarker教程

    一.什么是模板引擎,为什么要用模板引擎 在B/S程式设计中,常常有美工和程序员二个角色,他们具有不同专业技能:美工专注于表现——创建页面.风格.布局.效果等等可视元素:而程序员则忙于创建程式的商业流程 ...

  3. jQuery.Validate验证库详解

    一.用前必备官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ API: http://jquery.bassist ...

  4. post可以直接把get请求代入到目标url中

    Feigong --非攻 非攻 取自<秦时明月>--非攻,针对不同情况自由变化的武器 Feigong,针对各种情况自由变化的mysql注入脚本 Feigong,In view of the ...

  5. BNF 巴科斯范式

    BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集.现在,几乎每一位新编程语言书籍 ...

  6. UIButton 去除按下效果(阴影)

    [btn setImage:[UIImage imageNamed:@"test.png"] forState:UIControlStateNormal];btn.adjustsI ...

  7. ecshop中$user对象

    ecshop中$user对象 2011-10-01 18:41:23|  分类: ECSHOP |  标签:ecshop  $user  对象  |举报|字号 订阅 http://blog.163.c ...

  8. common.js

    //检测浏览器 function checkb(){ var Sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua. ...

  9. SQL2008全部数据导出导入两种方法【转】

        方法一:生成脚本导出导入sql2008全部数据 第一步,右键要导出的数据库,任务--生成脚本 第二步,在设置脚本编写选项处,点击--高级(A),选择要编写脚本的数据的类型为:架构和数据 如果找 ...

  10. NRF51822之GPIOTE介绍

    Note This library is obsolete and should not be used in new designs. Instead, you should use GPIOTE ...