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技术技巧大全(五)
Jan 22 Javascript
javascript 实现父窗口引用弹出窗口的值的脚本
Aug 07 Javascript
JS实现图片横向滚动效果示例代码
Sep 04 Javascript
javascript仿php的print_r函数输出json数据
Sep 13 Javascript
动态加载JS文件的三种方法
Nov 08 Javascript
网页右侧悬浮滚动在线qq客服代码示例
Apr 28 Javascript
js打开windows上的可执行文件示例
May 27 Javascript
JQuery中clone方法复制节点
May 18 Javascript
AngularJs表单验证实例代码解析
Nov 29 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
Jul 18 Javascript
JS函数内部属性之arguments和this实例解析
Oct 07 Javascript
Nuxt.js 数据双向绑定的实现
Feb 17 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
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
JS JQUERY实现滚动条自动滚到底的方法
2015/01/09 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
python配置文件写入过程详解
2019/10/19 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
预备党员表决心书
2014/03/11 职场文书
公司节能减排方案
2014/05/16 职场文书
诚信贷款承诺书
2014/05/30 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
三八节活动主持词
2015/07/04 职场文书
初中英语教学反思范文
2016/02/15 职场文书
如何计划开一家便利店?
2019/07/31 职场文书