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>

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

JS 中 scrollWidth、scrollHeight、scrollLeft 、scrollTop 详解相关推荐

  1. js中toString()和String()区别详解

    转载自  js中toString()和String()区别详解 我们知道String()与 .toString()都是可以转换为字符串类型,但是String()与 .toString()的还是有区别的 ...

  2. vue在created调用点击方法_vue.js中created方法的使用详解

    这次给大家带来vue.js中created方法的使用详解,使用vue.js中created方法的注意事项有哪些,下面就是实战案例,一起来看一下. 这是它的一个生命周期钩子函数,就是一个vue实例被生成 ...

  3. JS中的日期和时间详解

    JS中的日期和时间详解 关于Date()构造函数 简单实例 用Date()构造函数创建时钟 关于Date()构造函数 Date()构造函数是javascript的核心语言部分,用来创建表示时间和日期的 ...

  4. js中的preventDefault与stopPropagation详解(转)

    先讲解一下js中preventDefault和stopPropagation两个方法的区别: preventDefault方法的起什么作用呢?我们知道比如<a href="http:/ ...

  5. js中转换json对象方法详解及使用案例

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语 ...

  6. php模拟红绿灯,JS 中使用Promise 实现红绿灯详解

    本文通过实例代码给大家介绍了JS 中使用Promise 实现红绿灯效果,在文中给大家介绍了一个promise用法例子,需要的朋友可以参考下,希望能帮助到大家. 要求使用promise 实现红绿灯颜色的 ...

  7. js中的preventDefault与stopPropagation详解

    1. preventDefault: 比如<a href="http://www.baidu.com">百度</a>,这是html中最基础的东西,起的作用就 ...

  8. 行为模型实例 php,JS中事件模型的实例详解

    之前对事件模型还是比较清楚的,许多概念都清晰映射在脑海中.工作之后,一方面使用的 局限性,二是习惯于用框架中的各种事件监听方式,简单即方便,久而久之,事件的一些概念开 始淡出记忆中,就像我现在已经开始 ...

  9. JS中的事件委托 / 代理详解

    [前言] 事件委托/代理是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的 [主体] 概述: 那什么叫事件委托呢?它还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用 ...

  10. 学习笔记之js中导出表格到excel详解+源码

    在系统开发中,经常会遇到要将一个表格数据导出到excel中,刚刚做完,把示例代码共享一下,话不多说直接上代码. <!DOCTYPE html> <html> <head ...

最新文章

  1. C语言:随笔5--指针1
  2. 架构之各种参数对应表
  3. 密码学系列之:内容嗅探
  4. 使用 ML.NET 识别乐高颜色块
  5. Vue+mui实现图片的本地缓存
  6. 五一期间,飞鸽传书我又更新了。
  7. linux 物理内存用完了_调整linux内核尽量用内存,而不用swap
  8. php源码微信快速登陆,PHP实现微信开放平台扫码登陆源码下载
  9. 极简代码(四)—— 分段函数(sinc)的实现
  10. OpenGL ES 3.0学习实践
  11. 【树链剖分】树链剖分讲解
  12. 将超星PDG文件转换成PDF文件的方法
  13. 对路径“C:\Program Files (x86)\gwssi\CPC客户端\CheckWord.xml”的访问被拒绝。
  14. .fnt 字体不能正常显示
  15. 抽象代数学习笔记四《群:子群、同构、同态》
  16. Android流程图
  17. 嵌入式设计 | 基于51单片机的tea5767收音机设计实操教程
  18. JavaScript ES6介绍
  19. GPS导航仪的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. Vue中如何根据svg内容显示图片

热门文章

  1. Airmail for Mac 5.1强大的、最小的电子邮件客户端。
  2. SpringSecurity整合OAuth2.0
  3. 没涂准考证号电脑能识别吗
  4. 编程语言全球流行榜前50名年龄统计,优秀的编程语言都出生在哪个年代?
  5. [CF628D]Magic Numbers 题解
  6. Azkaban:工作流调度
  7. 【每日医信资讯】2022年11月03日-综合医讯一览
  8. Package missing in current channels
  9. 空压机安全阀行业现状调研及趋势分析报告
  10. linux和unix区别