JS中几种获取对象宽度和高度的区别

JS中几种获取对象宽度和高度的区别,第1张

1、clientWidth / clintHeight

clientWidth  = 元素宽度 + 元素的paddingLeft + 元素的paddingRight

clientHeight = 元素的高度 + 元素的paddingTop + 元素的paddingBottom

注意:如果该元素上存在上下滑动滚动条,则clientWidth的值不包括滚动条所占的宽度(即获得的clientWidth已经减去了滚动条的宽度)

注意:如果该元素上存在左右滑动滚动条,则clientHeight的值不包括滚动条所占的宽度(即获得的clientHeight已经减去了滚动条的高度)

2、clientTop / clientLeft

clientTop - 可视区域的上边距距离自身上边框的外边框的距离(即为上边框的宽度)

clientLeft - 可视区域的左边距距离自身左边框的外边框的距离(即为左边框的宽度)

没有滑动条的效果代码如下:

[html] view plain copy

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>获取元素的高度和宽度</title>

<style type="text/css">

#wrap{

height: 500px;

width: 500px;

background-color: skyblue;

margin: 0 auto;

border: 3px solid red;

overflow: scroll;

}

#content{

height: 200px;

width: 200px;

background-color: greenyellow;

margin: 0 auto;

border: 0px solid yellow;

border-width: 5px 6px 8px 12px;

padding: 5px 4px 6px 12px;

margin-top: 50px;

}

</style>

</head>

<body>

<div id="wrap">

<div id="content"></div>

</div>

</body>

<script type="text/javascript">

//获取content对象

var contentObj = documentgetElementById("content");

consolelog(contentObjclientHeight);

consolelog(contentObjclientWidth);

</script>

</html>  

以上结果输出的即为id为content的div的clientHeight 和 clientWidth 分别为 211 = height(200) + paddingTop(5) + paddingBottom(6)

有滚动条的代码如下,

在content div的里面添加一个id为one的div让新添加的div超出隐藏即可出现滚动条

[html] view plain copy

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>获取元素的高度和宽度</title>

<style type="text/css">

#wrap{

height: 500px;

width: 500px;

background-color: skyblue;

margin: 0 auto;

border: 3px solid red;

overflow: scroll;

padding: 5px;

}

#content{

height: 200px;

width: 200px;

background-color: greenyellow;

margin: 0 auto;

border: 0px solid yellow;

border-width: 5px 6px 8px 12px;

padding: 5px 4px 6px 12px;

margin-top: 50px;

overflow: scroll;

}

#one{

height: 300px;

width: 300px;

}

</style>

</head>

<body>

<div id="wrap">

<div id="content">

<div id="one"></div>

</div>

</div>

</body>

<script type="text/javascript">

//获取content对象

var contentObj = documentgetElementById("content");

consolelog(contentObjclientHeight);

consolelog(contentObjclientWidth);

consolelog(contentObjclientTop);

consolelog(contentObjclientLeft);

</script>

</html>  

最后输出的结果为clientHeight 和 clientWidth分别为 196 = height(200) + paddingTop(5) + paddingBottom(6) - 滚动条的宽度(15)

201 = width(200) + paddingLeft(12) + paddingRight(4) - 滚动条的宽度(15)

3、offsetHeight / offsetWidth

offsetHeight / offsetWidth实际上获取的内容和clientHeight / clientWidth的差别在于,offsetHeight和offsetWidth 不仅包括元素的高度和宽度和padding的值,而且包括border的宽度

注意:offsetHeight / offsetWidth包括滚动条的宽度(这一点与clientHeight / clientWidth)不同

[html] view plain copy

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>获取元素的高度和宽度</title>

<style type="text/css">

#wrap{

height: 500px;

width: 500px;

background-color: skyblue;

margin: 0 auto;

border: 3px solid red;

overflow: scroll;

padding: 5px;

}

#content{

height: 200px;

width: 200px;

background-color: greenyellow;

margin: 0 auto;

border: 0px solid yellow;

border-width: 5px 6px 8px 12px;

padding: 5px 4px 6px 12px;

margin-top: 50px;

overflow: scroll;

}

#one{

height: 300px;

width: 300px;

}

</style>

</head>

<body>

<div id="wrap">

<div id="content">

<div id="one"></div>

</div>

</div>

</body>

<script type="text/javascript">

//获取content对象

var contentObj = documentgetElementById("content");

consolelog(contentObjoffsetHeight);

consolelog(contentObjoffsetWidth);

consolelog(contentObjoffsetLeft);

consolelog(contentObjoffsetTop);

</script>

</html>  

输出的结果:offsetHeight = height(200) + paddingTop(5) + paddingBottom(6) + borderTop(5) + borderBottom(8)

offsetWidth = width(200) + paddingLeft(12) + paddingRight(4)  + borderLeft(12) + borderRight(6)

4、offsetTop / offsetLeft

offsetTop - 该元素的上边框的外边缘距离父级元素上边框的内边缘的距离

offsetLeft - 该元素的左边框的外边缘距离父级元素左边框的内边缘的距离

5、scrollHeight / scrollWidth

scrollHeight = 子级超出父级的元素的高度 + 父级的上下padding值

scrollWidth = 子级超出父级的元素的宽度 + 父级的左padding

6、scrollTop

scrollTop 元素滚动的距离

offset有offsetParent、offsetTop、offsetLeft、offsetWidth、offsetHeight;

offsetParent:当前容器的父级并且是已进行过CSS定位的容器元素。 如果这个容器元素未进行CSS定位, 则offsetParent属性的取值为根元素

offsetWidth:元素的可视宽度,包括元素的边框(border),水平padding,元素本身宽度

offsetLeft:元素的边框的外边缘距离与已定位的父容器(offsetparent)的左边距离(不包括元素的边框和父容器的边框)

var de = documentdocumentElement;

var w = selfinnerWidth || (de&&declientWidth) || documentbodyclientWidth;

var h = selfinnerHeight || (de&&declientHeight) || documentbodyclientHeight;

fgDivcss({width:defaultWidth+"px",height:defaultHeight+"px",left: ((w - defaultWidth)/2)+"px",top:((h-defaultHeight)/2)+"px" });

给段代码,你多试试吧

$("选择器")offset() //该方法返回当前选择元素的第一个元素左上角(包括边框)距离整个页面顶部和左边的距离,返回值为{left:x, top:y} 例:$("div")offset()top;得到该元素在距离页面顶部的距离

$("选择器")offsetParent() //该方法与offset返回值类型相同,只不过此方法返回的是该元素距离父元素的top和left

获取页面中元素到文档区域document的横向 纵向坐标的两种方法及其比较

在js控制元素运动的过程中 对于页面元素坐标位置的获取是经常用到的 这里主要总结下两种方法

一 通过叠加元素对象和它的offsetParent(如果存在)的offsetLeft/offsetTop属性来实现

在阅读javascript高级程序设计第三版DOM部分时 了解到要获取某个元素在页面上的偏移量 需要将这个元素的offsetLeft和offsetTop与其offsetParent的相同属性相加 一直循环直至根元素 所以 要得到元素到文档区域的坐标位置 只需通过while循环不断获取offsetParent的offsetLeft/offsetTop直到offsetParent = null为止

js代码

代码如下:

// 获取元素到文档区域的坐标

function getPosition(element) {

var actualLeft = element offsetLeft

actualTop = element offsetTop

current = element offsetParent; // 取得元素的offsetParent

// 一直循环直到根元素

while (current !== null) {

actualLeft += current offsetLeft;

actualTop += current offsetTop;

current = current offsetParent;

}

// 返回包含left top坐标的对象

return {

left: actualLeft

top: actualTop

};

}

例子截图

firebug下测试结果截图 (注 其他浏览器已通过测试!)

二 通过 getBoundingClientRect() 方法实现

getBoundingClientRect方法用于获得页面中某个元素的左 上 右和下分别相对浏览器视窗window的位置 返回的是一个对象 该对象有四个属性 top left right bottom;该方法原本是IE Only的 但是FF +和Opera +已经支持了该方法 可以说在获得页面元素位置上效率有很大的提高 另外 该方法避免使用while循环 而是直接获取数值来实现 比第一种方法性能要好 特别是在复杂的页面上更为明显

js代码

代码如下:

// 获取元素到文档区域的坐标

function getPosition(element){

var dc = document

rec = element getBoundingClientRect()

_x = rec left // 获取元素相对浏览器视窗window的左 上坐标

_y = rec top;

// 与或body元素的滚动距离相加就是元素相对于文档区域document的坐标位置

_x += dc documentElement scrollLeft || dc body scrollLeft;

_y += dc documentElement scrollTop || dc body scrollTop;

return {

left: _x

top: _y

};

}

经测试 该方法与第一种方法获取元素相对于document的坐标大小相同 对于IE低版本浏览器 存在一些差异

注意 记得要累加上(IE除外)或body(针对IE)元素的水平或垂直滚动距离!

lishixinzhi/Article/program/Java/JSP/201311/20207

offset 自己的

目的: js中有一套方便的获取元素尺寸的办法就是offset家族;

div { width:220px; border-left:2px solid red; padding:10px;}

divoffsetWidth = 220 + 2 + 20

为什么不用 divstylewidth 因为东西 只能得到行内的数值

如果 父级 都没有定位则以body 为准

这里的父级指的是所上一级 不仅仅指的是 父亲 还可以是 爷爷 曾爷爷 曾曾爷爷。。。。

offsetParent返回该对象的父级 (带有定位) 不一定是亲的爸爸

前面学过一个返回父亲(亲的) parentNode 有所区别

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

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

1.最大区别在于 offsetLeft 可以返回没有定位盒子的距离左侧的位置。 而 styletop 不可以 只有定位的盒子 才有 left top right

2.offsetTop 返回的是数字,而 styletop 返回的是字符串,除了数字外还带有单位:px。

3.offsetTop 只读,而 styletop 可读写。

4.如果没有给 HTML 元素指定过 top 样式,则 styletop 返回的是空字符串。

5.最重要的区别 styleleft 只能得到 行内样式 offsetLeft 随便

我们学过一些事件 : onmouseover onmouseout onclick

event 单词翻译过来 事件 的意思

event 就是事件的对象 指向的是 事件 是 onclick

在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。所有浏览器都支持event对象,但支持的方式不同。

比如鼠标 *** 作时候,会添加鼠标位置的相关信息到事件对象中。

普通浏览器支持 event

ie 678 支持 windowevent

是以我们的 电脑屏幕 为基准点 测量

以我们的 文档 (绝对定位) 的基准点 对齐

ie678 不认识

可视区域 为基准点 类似于 固定定位

onmouseover onmouseout onclick

onmousemove 当鼠标移动的时候 就是说,鼠标移动一像素就会执行的事件

divonmousemove = function() { 语句 }

当鼠标再div 身上移动的时候,就会执行。

他们相同点 都是 经过 div 才会触发

divonmouseover 只触发一次

divonmousemove 每移动一像素,就会触发一次

onmouseup 当鼠标d起

onmousedown 当鼠标按下的时候

1拖动 原理 == 鼠标按下 接着 移动鼠标 。

baronmousedown = function(){

documentonmousemove = function(){

}

}

2当我们按下鼠标的时候,就要记录当前 鼠标 的位置 - 大盒子的位置

算出 bar 当前 在 大盒子内的距离 。

我们知道 按下鼠标然后拖拽可以选择文字 的。

清除选中的内容

offset 自己的 偏移

offsetWidth 得到自己的宽度

offsetHeight

构成 : width + padding + border

div width 200 border 3px padding-right: 15px

div offsetWidth = 200 + 6 + 15 = 221

◆ offsetLeft 和 offsetTop

divoffsetLeft

得到距离 这个 div 最近的 带有定位的 父 盒子 左边距离

◆ offsetParent 返回自己的父亲元素 (带有定位的)

parentNode 这个返回亲父亲 不管父亲是否带有定位

◆ styletop 和 offsetTop

offsetTop 只读 只可以得到结果 但是不能赋值

styletop 能得到 (行内式 ) 但是可以给值

styletop 得到的是 25px

offsetTop 得到的是 25

◆ 事件对象 event

divonclick = function(event) { } event 是点击的事件对象

event 集合点击事件的相关信息

pageX 文档的 参考点

clientX 可视区域

ScreenX 屏幕

◆ 常用事件

onmouseover 经过

onmouseout 离开

onmousemove 鼠标移动

var num = 0;

divonmouseover = function() { num++; consolelog(num))} 1

divonmousemove = function() { num++; consolelog(num))}

onmousedown 按下鼠标

onmouseup d起鼠标

拖拽: 先按下鼠标 然后 移动鼠标

baronmousedown = funtion() {

documentonmousemove = function() {}

}

最大 window 对象 document对象

今日案例:筋斗云、点击跟随鼠标、放大镜案例素材获取

链接: > 密码:homu

可以使用offset() 方法,该方法返回或设置匹配元素相对于文档的偏移(位置),该方法返回的对象包含两个整型属性:top 和 left,以像素计。此方法只对可见元素有效。

1、使用offset() 方法获取一个元素距离浏览器的顶部和左边的可视距离,代码如下:

<html>

<head>

<script type="text/javascript" src="/jquery/jqueryjs"></script>

<script type="text/javascript">

$(document)ready(function(){

  $("button")click(function(){

    x=$("p")offset();

    $("#span1")text(xleft);

    $("#span2")text(xtop);

  });

});

</script>

</head>

<body>

<p>本段落的偏移是 <span id="span1">unknown</span> left 和 <span id="span2">unknown</span> top。</p>

<button>获得 offset</button>

</body>

</html>

2、运行的结果如下:

以上就是关于JS中几种获取对象宽度和高度的区别全部的内容,包括:JS中几种获取对象宽度和高度的区别、js的offset什么意思、js里怎么获得元素到屏幕的距离等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9818553.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存