JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记


Posted in Javascript onJuly 15, 2020

全文参考:https://github.com/iuap-design/blog/issues/38 、MDN

clientHeight,只读

clientHeight可以用公式 CSS height + CSS padding - 水平滚动条的高度 (如果存在) 来计算。

JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记

如图,这样一个div,它的clientHeight为95,计算:50(height)+30(padding-top)+30(padding-bottom)-15(经测量滚动条高度就是15)=95

clientTop,只读

一个元素顶部边框的宽度(以像素表示)。嗯。。就只是border-top-width

类似的属性还有一个clientLeft,顾名思义……

offsetHeight,只读

元素的offsetHeight是一种元素CSS高度的衡量标准,包括元素的边框、内边距和元素的水平滚动条(如果存在且渲染的话),是一个整数。

还是上面的图,div的offsetHeight为112。计算:50+60(上下内边距)+2(上下边框)=112

offsetTop,只读

HTMLElement.offsetParent是一个只读属性,返回一个指向最近的包含该元素的定位元素。如果没有定位的元素,则offsetParent为最近的table,table cell或根元素(标准模式下为html;quirks 模式下为body)。当元素的style.display设置为 "none" 时,offsetParent返回null。

它返回当前元素相对于其offsetParent元素的顶部的距离。

还是上面那张图,div的offsetTop为20,因为margin-top是20,距离html顶部的距离是20...

scrollHeight,只读

实话,这么久了,竟然一直搞错这个scroll相关属性,其实它描述的是outer的属性,而窝一直取inner的属性值,难怪scrollTop一直是0。。。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
 <style>
  #outer {
   margin: 100px 50px;
   background: url(http://images.cnblogs.com/cnblogs_com/wenruo/873448/o_esdese.jpg);
   height: 100px;
   width: 50px;
   padding: 10px 50px;
   overflow: scroll;
  } 
  #inner {
   height: 200px;
   width: 50px;
   background-color: #d0ffe3;
  }
 </style>
</head>
<body>
 <div id="outer">
  <div id="inner"></div>
 </div>
</body>
</html>

因为限制了父元素的高度,所以不能全部显示子元素,设置了overflow之后,可以通过滚动条的形式滑动查看子元素。效果如图1,如果没有限制父元素的高度,那么效果将如图2显示。

JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记(图1) JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记(图2)

scrollHeight就是图2的高度,没有高度限制时,能够完全显示子元素时的高度(clientHeight)。

所以这里scrollHeight为220,计算:200+10+10=220

scrollTop,可写

是这些元素中唯一一个可写可读的。

下面的图是用微信截图随便画的:D(不小心混入了一个光标。。

JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记

JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记

JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记

所以当滚动条在最顶端的时候,scrollTop=0,当滚动条在最低端的时候,scrollTop=115

这个115怎么来的(滚动条高度是15,我量的),见下图。(实为我主观臆测,不保证准确性。。。_(:з」∠)_

JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记

scrollTop是一个整数。

如果一个元素不能被滚动,它的scrollTop将被设置为0

设置scrollTop的值小于0,scrollTop被设为0。

如果设置了超出这个容器可滚动的值,scrollTop会被设为最大值。

判定元素是否滚动到底:

element.scrollHeight - element.scrollTop === element.clientHeight

返回顶部

element.scrollTop = 0

一个简单的返回顶部的时间,一个需要注意的地方是,动画是由快到慢的。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>返回顶部</title>
 <style>
  #outer { height: 100px; width: 100px; padding: 10px 50px; border: 1px solid; overflow: auto; }
 </style>
</head>
<body>
 <div id="outer">
  <div id="inner"></div>
 </div>
 <button onclick="toTop(outer)">返回顶部</button>
 <script>
  function toTop(ele) {
   // ele.scrollTop = 0;
   let dy = ele.scrollTop / 4; // 每次更新scrollTop改变的大小
   if (ele.scrollTop > 0) {
    ele.scrollTop -= Math.max(dy, 10);
    setTimeout(() => {
     toTop(ele, dy);
    }, 30);
   }
  }
  // 初始化
  window.onload = () => {
   for (let i = 0; i < 233; i++) inner.innerText += `第${i}行\n`;
  }
 </script>
</body>
</html>

到此这篇关于JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记的文章就介绍到这了,更多相关JavaScript scrollTop scrollHeight offsetTop offsetHeight内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
Dec 23 Javascript
javascript 自定义回调函数示例代码
Sep 26 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
Sep 11 Javascript
js实现密码强度检测【附示例】
Mar 30 Javascript
AngularJs 动态加载模块和依赖
Sep 15 Javascript
vue开发心得和技巧分享
Oct 27 Javascript
深入理解javascript中的 “this”
Jan 17 Javascript
Vue.js学习之过滤器详解
Jan 22 Javascript
Vue自定义指令详解
Jul 28 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
Nov 27 Javascript
讲解vue-router之什么是嵌套路由
May 28 Javascript
vue使用video.js进行视频播放功能
Jul 18 Javascript
JavaScript实时更新当前的时间的示例代码
Jul 15 #Javascript
jQuery 添加元素和删除元素的方法
Jul 15 #jQuery
vue如何在项目中调用腾讯云的滑动验证码
Jul 15 #Javascript
Vue中keep-alive的两种应用方式
Jul 15 #Javascript
js实现浏览器打印功能的示例代码
Jul 15 #Javascript
详解Vue中的MVVM原理和实现方法
Jul 15 #Javascript
详解JavaScript 作用域
Jul 14 #Javascript
You might like
队列在编程中的实际应用(php)
2010/09/04 PHP
PHP curl 并发最佳实践代码分享
2012/09/05 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
js的写法基础分析
2011/01/17 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
js制作可以延时消失的菜单
2017/01/13 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
使用webpack和rollup打包组件库的方法
2021/02/25 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
深入浅出学习python装饰器
2017/09/29 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
3分钟学会一个Python小技巧
2018/11/23 Python
django 中的聚合函数,分组函数,F 查询,Q查询
2019/07/25 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
BLACKMORES澳洲官网:澳大利亚排名第一的保健品牌
2018/09/27 全球购物
人力资源部培训专员岗位职责
2014/01/02 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
班组拓展活动方案
2014/08/14 职场文书
甜品店创业计划书
2014/09/21 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书