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 相关文章推荐
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
Oct 29 Javascript
jQuery 使用个人心得
Feb 26 Javascript
jquery实现非叠加式的搜索框提示效果
Jan 07 Javascript
jQuery html()方法使用不了无法显示内容的问题
Aug 06 Javascript
PHP+mysql+Highcharts生成饼状图
May 04 Javascript
深入浅析AngularJS中的module(模块)
Jan 04 Javascript
javascript作用域、作用域链(菜鸟必看)
Jun 16 Javascript
canvas 弹幕效果(实例分享)
Jan 11 Javascript
如何用js判断dom是否有存在某class的值
Feb 13 Javascript
vue.js仿hover效果的实现方法示例
Jan 28 Javascript
微信小程序基于Taro的分享图片功能实践详解
Jul 12 Javascript
微信小程序反编译的实现
Dec 10 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
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
基于PHP实现等比压缩图片大小
2016/03/04 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
Smarty模板配置实例简析
2019/07/20 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
JS 实现Json查询的方法实例
2013/04/12 Javascript
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
Extjs 点击复选框在表格中增加相关信息行
2016/07/12 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
[08:40]Navi Vs Newbee
2018/06/07 DOTA
Python模块搜索概念介绍及模块安装方法介绍
2015/06/03 Python
深入理解Python装饰器
2016/07/27 Python
python队列queue模块详解
2018/04/27 Python
Django 连接sql server数据库的方法
2018/06/30 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
室内设计专业个人的自我评价
2013/10/19 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
2016公司年会通知范文
2015/04/25 职场文书
公司员工辞职信范文
2015/05/12 职场文书
关于感恩的作文
2019/08/26 职场文书
世界十大狙击步枪排行榜
2022/03/20 杂记
TS 类型兼容教程示例详解
2022/09/23 Javascript