iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JS属性scrollTop、clientHeight和scrollHeight怎么使用
  • 862
分享到

JS属性scrollTop、clientHeight和scrollHeight怎么使用

2023-07-02 16:07:21 862人浏览 安东尼
摘要

这篇文章主要介绍“js属性scrollTop、clientHeight和scrollHeight怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JS属性scrollTop、clientHeig

这篇文章主要介绍“js属性scrollTop、clientHeight和scrollHeight怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JS属性scrollTop、clientHeight和scrollHeight怎么使用”文章能帮助大家解决问题。

1.clientWidth、clientHeight、clientLeft、clientTop

1.1 clientWidth

(1)含义:只读属性,表示元素的内部宽度,单位为像素。

(2)从盒子模型角度看:包含padding,但不包含border, margin 以及垂直滚动条。

(3)注意:内联元素clientWidth为0。

(4)语法:element.clientWidth;

JS属性scrollTop、clientHeight和scrollHeight怎么使用

1.2 clientHeight

(1)含义:只读属性,表示元素的内部高度,单位为像素。

(2)从盒子模型角度看:包含padding,但不包含border, margin 以及水平滚动条。

(3)注意:内联元素clientHeight为0。

(4)语法:element.clientHeight;

1.3 clientLeft

(1)含义:只读属性,表示一个元素左边框的宽度,单位为像素。

(2)从盒子模型角度看:clientLeft 不包括左外边距和左内边距.

(3)语法:element.clientLeft

(4)备注:如果元素的文本方向是从右向左(RTL, right-to-left),并且由于内容溢出导致左边出现了一个垂直滚动条,则该属性包括滚动条的宽度。

1.4 clientTop

(1)含义:只读属性,表示一个元素顶部边框的宽度,单位为像素。

(2)从盒子模型角度看:不包括顶部外边距或内边距

(3)语法:element.clientTop

1.5 示例演示

以如下的盒子模型来验证来看一下这些值以及计算过程(采用的例子是MDN上的,您可以打开控制台自己试一下):

(1)首先控制台获取Dom元素:
const div = document.getElementById('iddiv')
(2)然后在 Eelments->Computed 看盒模型:

JS属性scrollTop、clientHeight和scrollHeight怎么使用

(3)查看clientWidth的值:

JS属性scrollTop、clientHeight和scrollHeight怎么使用

clientWidth计算:内容宽度+左右padding即 182+28*2 = 182 + 56 = 238

(4)查看clientHeight的值:

JS属性scrollTop、clientHeight和scrollHeight怎么使用

clietentHeight计算:内容高度+上下padding即 102 + 0 = 102

(5)查看clientLeft和clientTop值:

JS属性scrollTop、clientHeight和scrollHeight怎么使用

clientLeft和clientTop计算:左边框 24 ; 上边框24

注意以上的计算过程是笔者在盒模型的设置为:box-sizing: content-box时的计算方法,如果盒模型设置为 box-sizing: border-box; 则计算clientWidth 和 clientHeight的方法为:

(1)clientWidth :clientWidth 可以通过 CSS width+ CSS padding - 垂直滚动条宽度 (如果存在) 来计算

(2)clientHeight:clientHeight 可以通过 CSS height + CSS padding - 水平滚动条高度 (如果存在) 来计算

以clientWidth的计算为例说明一下

JS属性scrollTop、clientHeight和scrollHeight怎么使用

JS属性scrollTop、clientHeight和scrollHeight怎么使用

首先按照正常算法计算: 95 + 28*2 = 95 + 56 = 151 。151大于134 , 时因为还没有扣除滚动条的宽度,滚动条的宽度 为 151- 134 = 17 , 量了一下滚动条的宽度确实为17,如下图所示:

JS属性scrollTop、clientHeight和scrollHeight怎么使用

2.offsetWidth、offsetHeight、offsetLeft、offsetTop

2.1 offsetWidth

(1)含义:只读属性,返回元素的布局宽度,单位像素。

(2)从盒子模型角度看:包含通过css设置的width,border, padding以及竖直方向滚动条的宽度。

(3)语法:element.offsetWidth

(4)备注:各浏览器的 offsetWidth 可能有所不同。

2.2 offsetHeight

(1)含义:只读属性,元素的布局高度,单位像素。

(2)从盒子模型角度看:包含通过css设置的height, border, padding以及水平方向滚动条的高度。

(3)语法:element.offsetHeight

(4)备注:如果元素被隐藏则返回0。

接下来要介绍offsetLeft和offsetTop的含义,在这之前要明白offsetParent的含义:

htmlElement.offsetParent 是一个只读属性。

返回一个指向最近的(指包含层级上的最近)包含该元素的定位元素或者最近的 table,td,th,body元素。

当元素的 style.display 设置为 "none" 时,offsetParent 返回 null

2.3 offsetLeft

(1)含义:只读属性,当前元素左上角相对于offsetParent左边界的偏移。

(3)语法:element.offsetLeft

(4)备注:如果元素被隐藏则返回0。

2.4 offsetTop

(1)含义:只读属性,当亲元素相对于offsetParent元素的顶部内边距的距离。

(3)语法:element.offsetTop

(4)备注:如果元素被隐藏则返回0。

2.5 示例演示

笔者写了一个demo用来说明如上概念,代码如下:

<html lang="en">    <head>        <style>            .parent {                    width: 400px;                    height: 400px;                    border: 1px solid #ccc;                    padding-top: 50px;                    padding-left: 20px;            }            .child {                    width: 200px;                    height: 200px;                    padding: 10px;                    border: 10px solid black;                    overflow: auto;            }        </style>    </head>    <body>        <div class="parent">            <div class="child" id="child-id">                    <!-- 省略内部内容 -->            </div>        </div>    </body></html>

代码运行效果以及盒子模型如下图所示:

JS属性scrollTop、clientHeight和scrollHeight怎么使用

JS属性scrollTop、clientHeight和scrollHeight怎么使用

(1)获取内部div Dom元素
const div = document.getElementById('child-id')
(2)查看offsetWidth的值

JS属性scrollTop、clientHeight和scrollHeight怎么使用

其计算过程:border 20 + pading 20 + content 183 + 滚动条 17 = 240。

也就是: 20 + 20 + 200= 240

如果设置 box-sizing:border-box 则对应的盒子模型变为:

JS属性scrollTop、clientHeight和scrollHeight怎么使用

此时查看offsetWidth的值:

JS属性scrollTop、clientHeight和scrollHeight怎么使用

其计算过程: content 160 + padding 20 + border 20 = 200 。我们观察实际效果:

JS属性scrollTop、clientHeight和scrollHeight怎么使用

JS属性scrollTop、clientHeight和scrollHeight怎么使用

发现虽然computed的盒子模型显示padding是10 ,但实际上并不是10了,而且由于滚动条的存在左右显示的padding所占空间已经不相等。

(3)读取offsetHeight值

JS属性scrollTop、clientHeight和scrollHeight怎么使用

JS属性scrollTop、clientHeight和scrollHeight怎么使用

计算过程与offsetWidth类似: 183 content + 17 滚动条 +20 padding + 20 border = 240。如果设置 box-sizing:border-box 则offsetHeight值如下:

JS属性scrollTop、clientHeight和scrollHeight怎么使用

(4)读取offsetTop和offsetLeft的值

JS属性scrollTop、clientHeight和scrollHeight怎么使用

如上我们发现offsetParent为body元素, 那么offsetTop值为59 , offsetLeft的值为29,都是怎么算出来的啊?看一下body以及class为parent的外层div的盒模型结构:

JS属性scrollTop、clientHeight和scrollHeight怎么使用

JS属性scrollTop、clientHeight和scrollHeight怎么使用

参考盒子模型结构我们可以得到计算过程:

offsetTop : 8 (body padding) + 1 (parent border) +50 (parent padding) = 59

offsetLeft: 8 (body padding) + 1 (parent border) + 20 (parent padding) = 29

3.scrollLeft、scrollTop、scrollWidth、scrollHeight

3.1 scrollLeft

(1)含义:可读取可设置,一个元素的内容水平滚动的像素数(滚动条到元素左边的距离)。

(2)语法:Element.scrollLeft

(3)备注:注意如果这个元素的内容排列方向是rtl (right-to-left) ,那么滚动条会位于最右侧(内容开始处),并且scrollLeft值为 0。此时,当你从右到左拖动滚动条时,scrollLeft 会从 0 变为负数。

3.2 scrollTop

(1)含义:可读取可设置,一个元素的内容垂直滚动的像素数。

(2)语法:Element.scrollTop

(3)备注:一个元素的 scrollTop 值是这个元素的内容顶部(卷起来的)到它的视口可见内容(的顶部)的距离的度量。注意,这里并没有描述为滚动条距离顶部的距离,当然这样理解也没问题。当一个元素的内容没有产生垂直方向的滚动条,那么它的 scrollTop 值为0。

3.3 scrollWidth

(1)含义:只读属性,是一个元素内容宽度的度量,包括由于溢出导致的视图不可见内容。

(2)语法:Element.scrollWidth

(3)备注:没有水平滚动条的情况下,scrollWidth 值与元素视图填充所有内容所需要的最小值clientWidth相同。

3.4 scrollHeight

(1)含义:只读属性,是一个元素内容高度的度量,包括由于溢出导致的视图不可见内容。

(2)语法:element.scrollHeight

(3)备注:没有垂直滚动条的情况下,scrollHeight 值与元素视图填充所有内容所需要的最小值clientHeight相同。

为了说明scrollHeight 的含义,MDN文档给出了如下的示意图:

JS属性scrollTop、clientHeight和scrollHeight怎么使用

3.5 示例演示

示例代码任然沿用2.5 节的demo示代码, 运行效果如下:

(1)查看scrollLeft的值

JS属性scrollTop、clientHeight和scrollHeight怎么使用

JS属性scrollTop、clientHeight和scrollHeight怎么使用

如上图所示:水平方向上滚动条没有向右滚动时,则scrollLeft的值为0。

JS属性scrollTop、clientHeight和scrollHeight怎么使用

JS属性scrollTop、clientHeight和scrollHeight怎么使用

如上图所示:水平方向滚动条向右滚动了一定距离,则此时scrollLeft的值为58。

(2)查看scrollTop的值

JS属性scrollTop、clientHeight和scrollHeight怎么使用

JS属性scrollTop、clientHeight和scrollHeight怎么使用

如上图所示:竖直方向上滚动条没有向下滚动时,则scrollTop的值为0。

JS属性scrollTop、clientHeight和scrollHeight怎么使用

JS属性scrollTop、clientHeight和scrollHeight怎么使用

如上图所示:竖直方向上滚动条没有向下滚动了一定距离,则此时scrollTop的值为59。

(3)查看crollWidth的值

JS属性scrollTop、clientHeight和scrollHeight怎么使用

JS属性scrollTop、clientHeight和scrollHeight怎么使用

如上图所示:scrollWidth的值为704,代表内容的宽度。

(4)查看scrollHeight的值

JS属性scrollTop、clientHeight和scrollHeight怎么使用

JS属性scrollTop、clientHeight和scrollHeight怎么使用

如上图所示:scrollHeight的值为262,代表内容的高度。

4.彼此之间的数量关系以及应用

(1)关系1

没有竖直方向上的滚动条: scrollHeight = clientHeight

应用:判断竖直方向是是否有滚动条

(2)关系2

没有水平方向上的滚动条:scrollWidth = clientWidth

应用:判断水平方向是否有滚动条

(3)关系3

scrollTop + clientHeight >= scrollHeight

因为scrollTop是一个非整数,而scrollHeight和clientHeight是四舍五入的,因此确定滚动区域是否滚动到底的唯一方法是查看滚动量是否足够接近某个阈值:

Math.abs(element.scrollHeight - element.clientHeight - element.scrollTop) < 1

关于“JS属性scrollTop、clientHeight和scrollHeight怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: JS属性scrollTop、clientHeight和scrollHeight怎么使用

本文链接: https://www.lsjlt.com/news/343296.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JS属性scrollTop、clientHeight和scrollHeight怎么使用
    这篇文章主要介绍“JS属性scrollTop、clientHeight和scrollHeight怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JS属性scrollTop、clientHeig...
    99+
    2023-07-02
  • JS属性scrollTop clientHeight scrollHeight理解学习
    目录引言1.clientWidth、clientHeight、clientLeft、clientTop1.1 clientWidth1.2 clientHeight1.3 clien...
    99+
    2022-11-13
  • 怎么使用js中hasOwnProperty的属性
    本篇内容主要讲解“怎么使用js中hasOwnProperty的属性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用js中hasOwnProperty的属性”吧!js不会保护hasOwnPr...
    99+
    2023-06-25
  • js的math属性怎么用
    这篇文章主要为大家展示了“js的math属性怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js的math属性怎么用”这篇文章吧。 <!DOCTYP...
    99+
    2022-10-19
  • js的documeng属性怎么用
    这篇文章主要介绍了js的documeng属性怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 <!DOCTYPE html>...
    99+
    2022-10-19
  • js中的string属性怎么用
    这篇文章给大家分享的是有关js中的string属性怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 <!DOCTYPE html> <html> ...
    99+
    2022-10-19
  • js中使用Window location.href属性无效怎么解决
    如果在JavaScript中使用Window.location.href属性没有效果,有几种可能的解决方法:1. 确保代码运行在浏览...
    99+
    2023-10-11
    js
  • JS盒子模型的基本属性怎么使用
    这篇“JS盒子模型的基本属性怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JS盒子...
    99+
    2022-10-19
  • Vue监听属性和计算属性怎么使用
    这篇文章主要讲解了“Vue监听属性和计算属性怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue监听属性和计算属性怎么使用”吧!一、watch监听属性这个属性用来监视某个数据的变化,...
    99+
    2023-06-25
  • 怎么使用JS动态合并两个对象的属性
    这篇文章给大家分享的是有关怎么使用JS动态合并两个对象的属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我们可以使用扩展操作符(...)将不同的对象合并为一个对象,这也是合并两...
    99+
    2022-10-19
  • Css字体属性和文本属性怎么用
    这篇文章主要为大家展示了“Css字体属性和文本属性怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Css字体属性和文本属性怎么用”这篇文章吧。字体属性:主要...
    99+
    2022-10-19
  • html属性怎么使用
    今天小编给大家分享一下html属性怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。class属性class属性用于指定...
    99+
    2023-07-06
  • CSS的margin和padding属性怎么使用
    这篇文章主要介绍了CSS的margin和padding属性怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CSS的margin和padding属性怎么使用文章都会有所收获,下面我们一起来看看吧。margi...
    99+
    2023-07-04
  • CSS中margin和padding属性怎么使用
    这篇文章给大家介绍CSS中margin和padding属性怎么使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。CSS教程:详解margin和padding属性应用场合margin和p...
    99+
    2022-10-19
  • CSS的padding和margin属性怎么使用
    这篇文章主要介绍“CSS的padding和margin属性怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS的padding和margin属性怎么使用”文...
    99+
    2022-12-27
    css padding margin
  • CSS的float和position属性怎么使用
    本文小编为大家详细介绍“CSS的float和position属性怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“CSS的float和position属性怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-04
  • js使用in和hasOwnProperty获取对象属性的区别是什么
    小编给大家分享一下js使用in和hasOwnProperty获取对象属性的区别是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!in判断的是对象的所有属性,包括对象实例及其原型的属性;而...
    99+
    2022-10-19
  • css中怎么使用border属性与display属性
    这篇文章主要介绍css中怎么使用border属性与display属性,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! css中如何使用border属性与display属性 bord...
    99+
    2022-10-19
  • CSS尺寸属性怎么定义和使用
    这篇文章主要介绍了CSS尺寸属性怎么定义和使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CSS尺寸属性怎么定义和使用文章都会有所收获,下面我们一起来看看吧。CSS 尺寸属性CSS 尺寸属性允许你控制元素的高...
    99+
    2023-07-04
  • python类的属性和方法怎么使用
    在Python中,类的属性和方法可以通过类的实例进行访问和调用。类的属性可以在类的定义中进行声明,并在实例化后通过实例进行访问。例如...
    99+
    2023-10-10
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作