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

JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记全文参考:https://github.com/iuap-design/blog/issues/38、MDNclientHeight,只读clientHeight可以用公式CSSheigh

大家好,又见面了,我是你们的朋友全栈君。

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

clientHeight,只读

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

<span role="heading" aria-level="2">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 为最近的 tabletable 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显示。

<span role="heading" aria-level="2">JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记(图1)                        <span role="heading" aria-level="2">JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记(图2)

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

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

 

scrollTop,可写

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

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

<span role="heading" aria-level="2">JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记 <span role="heading" aria-level="2">JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记<span role="heading" aria-level="2">JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记

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

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

<span role="heading" aria-level="2">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>

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155032.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 新手入门:websocket

    新手入门:websocketWebSocket详解1、什么是Socket?什么是WebSocket?2、WebSocket的通信原理和机制3、WebSocket技术出现之前,Web端实现即时通讯的方法有哪些?4、一个简单的WebSocket聊天小例子8、结语1、什么是Socket?什么是WebSocket?对于第1次听说WebSocket技术的人来说,两者有什么区别?websocket是仅仅将socket的概念移植到浏览器中的实现吗?我们知道,在网络中的两个应用程序(进程)需要全双工相互通信(全双工即双方可同时向对方发送消息),

    2022年7月11日
    16
  • linux搭建php运行环境_docker部署php项目

    linux搭建php运行环境_docker部署php项目方案一、phpStudyforLinuxphpStudyforLinux支持Apache/Nginx/Tengine/Lighttpd,支持php5.2/5.3/5.4/5.5切换已经在centos-6.5,debian-7.4.,ubuntu-13.10测试成功使用说明:服务进程管理:phpstudy(start|stop|restart|uninstall)

    2025年12月9日
    2
  • SQLi LABS Less-5 报错注入+布尔盲注「建议收藏」

    SQLi LABS Less-5 报错注入+布尔盲注「建议收藏」sqlilabs第五关,sqli-labesless-5,sqlilabsless5

    2022年9月29日
    3
  • C语言输入输出格式符[通俗易懂]

    C语言输入输出格式符[通俗易懂]C语言输入输出格式符printf函数(格式输出函数)1.一般格式printf(格式控制,输出表列)例如:printf(“i=%d,ch=%c\n”,i,ch);说明:(1)“格式控制”是用双撇号括起来的字符串,也称“转换控制字符串”,它包括两种信息:①格式说明:由“%”和格式字符组成,它的作用是将输出的数据转换为指定的格式输出。②普通字符,即需要原样输出的字符。(2)“输出表列”是需要输出的一些数据,可以是表达式(3)printf函数的一般形式可以表示为printf(参数1,参数2,…

    2022年7月24日
    14
  • idea mac激活码【注册码】[通俗易懂]

    idea mac激活码【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    47
  • 2020年5月份编程语言排行榜「建议收藏」

    2020年5月份编程语言排行榜「建议收藏」前言本文章中语言排名数据来自TIOBE排行榜和PYPL排行榜。这段时间一直在忙,都忘记更新这个排行榜了,今天重操旧业,给大家看一下5月份的编程语言排行榜TIOBE排行榜5月份数据2020年5月TIOBE指数以下是官方说明五月标题:编程语言C又回到了第一位Java和C在4月份已经非常接近了,但是这个月C再次超越了Java。上一次C排名第一是在2015年。我们只能猜测为什么C又是第一名。其中一个原因可能是冠状病毒。这听起来可能很傻,但有些编程语言确实从这种情况中受益。数据科学领域的例子有P

    2022年5月31日
    61

发表回复

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

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