JS 中 scrollWidth、scrollHeight、scrollLeft 、scrollTop 详解

JS 中 scrollWidth、scrollHeight、scrollLeft 、scrollTop 详解1.总述在JS中scrollWidth、scrollHeight、scrollLeft 、scrollTop属性在做一些复杂的交互效果中是非常常用的,因此在本博文中详细的介绍并给出实例。以上的4个属性是成对出现的,因此下面介绍中也成对的介绍,在实例中为了减少代码量,我直接用的id,实际开发中不推荐。2.scrollWidth和scrollHeight2.1概念element…

大家好,又见面了,我是你们的朋友全栈君。

1. 总述

在JS 中scrollWidth、scrollHeight、scrollLeft 、scrollTop 属性在做一些复杂的交互效果中是非常常用的,因此在本博文中详细的介绍并给出实例。
以上的4个属性是成对出现的,因此下面介绍中也成对的介绍,在实例中为了减少代码量,我直接用的id,实际开发中不推荐。

2. scrollWidth和scrollHeight

2.1 概念

  1. element.scrollWidth:返回元素的整体宽度,包括由于溢出而无法展示在网页的不可见部分。
  2. element.scrollHeight :返回元素的整体高度,包括由于溢出而无法展示在网页的不可见部分。

2.2 实例

在页面中,溢出说得更加通俗一些就是有没有滚动条出现,出现了,说明子元素有一部分被父元素遮挡了,就溢出了,下面给出两个实例,一个没有溢出(没有滚动条),一个溢出了,分别观察他们的scrollWidth和scrollHeight。

2.2.1 未溢出
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>test</title>
    <style> #parent_div{ 
     width: 200px; height: 180px; background: skyblue; overflow: auto; } #children_div{ 
     width: 100px; height: 120px; background:green; color: white; } </style>
</head>
<body>
    <div id="parent_div">
        <div id="children_div">
            this is children
        </div>
    </div>
    <script> console.log(children_div.scrollWidth, children_div.scrollHeight) </script>
</body>
</html>

打印结果为: 100 120 也就是我给出的children的大小。
在这里插入图片描述

2.2.2 溢出
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>test</title>
    <style> #parent_div{ 
     width: 200px; height: 180px; background: skyblue; overflow: auto; } #children_div{ 
     width: 300px; height: 320px; background:green; color: white; } </style>
</head>
<body>
    <div id="parent_div">
        <div id="children_div">
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Ab praesentium consectetur, eligendi odit labore blanditiis repudiandae quam quia, atque eius ipsam suscipit quaerat in dicta. Soluta quasi quam eveniet ex.
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Minus voluptate error fugiat dignissimos doloremque veritatis reiciendis illum hic repudiandae nobis a tempore quae accusamus, ab architecto suscipit assumenda dolorem explicabo.
        </div>
    </div>
    <script> console.log(children_div.scrollWidth, children_div.scrollHeight) </script>
</body>
</html>

打印结果为: 300 320 仍然是我给出的children的大小。
在这里插入图片描述

3. scrollLeft 和scrollTop

3.1 概念

  1. element.scrollLeft :返回元素左边缘与视图之间的距离,这里的视图指的是元素的内容(包括子元素以及内容)。
  2. element.scrollTop :返回元素上边缘与视图之间的距离。

我们在页面中经常会用到如图所示的带滚动条的框,我们的QQ消息,微信消息也是这样的呀!
在这里插入图片描述我们需要滑动滚动条来查看完整的视图,这个时候scrollLeft 和scrollTop就出现了,其实实际项目中我们是需要用到client和scroll这两大属性来自动的滑动滚动条,比如来新消息的时候,滚动条自动往下滑动到底部以便查看新消息。这是着重讲scroll,理解清楚了再进行下一步。

scrollLeft的概念是返回元素左边缘与视图之间的距离,我们一步一步的理解,首先,如上图所示,当我们没有滑动水平滚动条时,元素与它的内容默认是左上角顶点重合的,所以他们之间是没有距离的,此刻的
scrollLeft 为 0。
在这里插入图片描述
当我们拉动水平滚动条时,元素与视图就不再是左上角顶点重合了,水平之间是存在距离的(按左上角顶点重合计算),可以看到现在的scrollLef有了数值,因为没有移动垂直滚动条,因此垂直方向仍然是没有距离的。
在这里插入图片描述在这里插入图片描述
当我将水平,垂直滚动条都拉到底部时,scrollLeft 和 scrollTop 都 分别为116.8 和156.8 ,我设置的元素宽高分别为:200 180 ,视图(子元素)宽高分别为:300 320 ,如果正常计算的话最大距离应该为 : 300-200= 100 以及 320-180 = 140,但结果都增加了16左右,那么因为浏览器计算了滚动条的宽高,具体的代码我会在下面贴出,实际的代码会让你更加清楚的理解这一过程,你可以直接复制然后再浏览器中尝试。
在这里插入图片描述
在这里插入图片描述

3.2 实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>test</title>
    <style> #parent_div{ 
     width: 200px; height: 180px; background: skyblue; overflow: auto; } #children_div{ 
     width: 300px; height: 320px; background:green; color: white; } </style>
</head>
<body>
    <div id="parent_div">
        <div id="children_div">
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Ab praesentium consectetur, eligendi odit labore blanditiis repudiandae quam quia, atque eius ipsam suscipit quaerat in dicta. Soluta quasi quam 
            Lorem ipsum dolor sit amet consectetur, adipisicing elit.
        </div>
    </div>
    <script> parent_div.onscroll = function(){ 
     console.log(parent_div.scrollLeft) console.log(parent_div.scrollTop) } </script>
</body>
</html>

希望能够帮助到大家,有什么问题可以 直接评论即可,如果不够详细的话也可以说,我会及时回复的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163752.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Matlab mapminmax函数使用及原理[通俗易懂]

    Matlab mapminmax函数使用及原理[通俗易懂]几个要说明的函数接口:[Y,PS]=mapminmax(X)[Y,PS]=mapminmax(X,FP)Y=mapminmax(‘apply’,X,PS)X=mapminmax(‘reverse’,Y,PS)用实例来讲解,测试数据x1=[124],x2=[523];[y,ps]=mapminmax(x1)y=-1….

    2022年6月26日
    55
  • Python 变量的命名规范

    Python 变量的命名规范混乱或错误的命名不仅让我们对代码难以理解,更糟糕的是,会误导我们的思维,导致对代码的理解完全错误。相反,良好的命名,则可以让我们的代码非常容易读懂,也能向读者正确表达事物以及逻辑的本质,从而使得代码的可维护性就大大增强。

    2022年6月18日
    27
  • Flask—jsonify方式(api接口)「建议收藏」

    Flask—jsonify方式(api接口)「建议收藏」GET方法post方法PUT方法DELETE方法GET方法fromflaskimportFlask,jsonify,abort,make_responseapp=Flask(__name__)articles=[{‘id’:1,’title’:’thewaytopyt…

    2022年5月10日
    38
  • Git常用命令

    Git常用命令Git常用命令

    2022年4月23日
    41
  • 详解卡尔曼滤波原理[通俗易懂]

    详解卡尔曼滤波原理[通俗易懂]详解卡尔曼滤波原理  在网上看了不少与卡尔曼滤波相关的博客、论文,要么是只谈理论、缺乏感性,或者有感性认识,缺乏理论推导。能兼顾二者的少之又少,直到我看到了国外的一篇博文,真的惊艳到我了,不得不佩服作者这种细致入微的精神,翻译过来跟大家分享一下,

    2022年6月15日
    33
  • asp中的session使用方法

    asp中的session使用方法Session是什么呢?简单来说就是服务器给客户端的一个编号。当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站。当每个用户首次与这台WWW服务器建立连接时,他就与这个服务器

    2022年7月1日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号