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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tkmybatis详细教程(一篇就明白)

    tkmybatis是对底层sql进行了抽象封装,不需要考虑sql怎么写,只需要按照逻辑思维,遵循tkmybatis的语法即可实现数据库操作。本文适合对springboot项目结构有一定了解的读者。本文的项目基础是一个demo项目(多模块的)。1.配置1、添加tkmybatis的依赖<dependency><groupId>tk.mybatis</groupId>

    2022年4月1日
    307
  • Spring Boot+Vue开发实战_有关理解的图片带字

    Spring Boot+Vue开发实战_有关理解的图片带字SpringBootspringboot是依赖于spring的,bi’qi

    2022年8月21日
    3
  • python机器学习手写算法系列——线性回归「建议收藏」

    python机器学习手写算法系列——线性回归「建议收藏」本文致力于手把手教你实现一个最简单的机器学习模型–一元线性回归模型。短短的14行代码,就实现了。希望读完以后,你也能自己实现它。并对线性回归有更好的了解,或者从不了解到了解。

    2022年8月21日
    5
  • idea 设置黑色或白色背景以及图片背景

    idea 设置黑色或白色背景以及图片背景idea编辑软件在怎么设置黑色或者白色背景点击File–>setting(或者Ctrl+Alt+S)–>Editor–> Color scheme–>General 选择好风格之后,Apply–>OK 最后弹框中点击Yes即可。————————————————–…

    2022年6月13日
    40
  • File类、递归

    File类、递归

    2021年5月19日
    106
  • pycharm怎么配置tensorflow环境_ensp详细安装步骤

    pycharm怎么配置tensorflow环境_ensp详细安装步骤Tensorflow详细安装步骤及PyCharm配置Tensorflow是谷歌开源的深度学习框架,分为两个版本,GPU和CPU,主要的区别在于计算速度,GPU版本要比CPU计算速度更快,适用于处理大量复杂的数据,但需要计算机配置独立NVIDIA显卡。CPU版本没有显卡要求,安装更简单,合适新手小白和学生党,下面介绍CPU版本Tensorflow的详细安装步骤系统环境:Windows10第一步:安装Anaconda两种方式:直接在Anaconda官方网站下载,但速度很慢;建议第二种,选择镜像网站下载,

    2022年8月26日
    6

发表回复

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

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