js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版

yizhihongxing

关于 js 中 top、clientTop、scrollTop、offsetTop 四个属性的区别,我们可以这样来理解:

top

对于 Window 对象和 Frame 对象,top 属性返回当前窗口的最顶层的父级窗口,如果当前对象已经是最顶层窗口,该属性则返回这个对象本身。

对于 HTML 元素,如果元素的 position 属性值为 'static'(默认值),则 top 属性不起作用;如果 position 为 'absolute' 或 'fixed',则 top 属性表示该元素的顶部边缘到其 offsetParent 元素(非 static 定位的父元素)顶部边缘的距离。

示例:

<!DOCTYPE html>
<html>
<head>
    <title>top示例</title>
    <style type="text/css">
        #outer {
            position: absolute;
            top: 100px;
            left: 100px;
            width: 200px;
            height: 200px;
            background-color: pink;
        }
        #inner {
            position: absolute;
            top: 50px;
            left: 50px;
            width: 100px;
            height: 100px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div id="outer">
        <div id="inner"></div>
    </div>
    <script type="text/javascript">
        // 获取 inner 的 top 值
        var inner = document.getElementById('inner');
        console.log(inner.style.top); // '50px'

        // 获取 inner 的 offsetParent 元素的 top 值
        var offsetParentTop = inner.offsetParent.offsetTop;
        console.log(offsetParentTop); // 100
    </script>
</body>
</html>

clientTop

clientTop 属性返回元素上方和左侧边框的宽度(以像素为单位)。通常情况下,元素的 clientTop 应该等于该元素的 CSS 样式表中定义的边框宽度。

示例:

<!DOCTYPE html>
<html>
<head>
    <title>clientTop示例</title>
    <style type="text/css">
        div {
            border: 1px solid black;
        }
    </style>
</head>
<body>
    <div id="box">hello world</div>
    <script type="text/javascript">
        // 获取 box 元素的 clientTop 值
        var box = document.getElementById('box');
        console.log(box.clientTop); // 1
    </script>
</body>
</html>

scrollTop

scrollTop 属性是获取或设置一个可以滚动的元素顶部相对于其顶部的偏移。当元素内容不溢出其任何框架时,scrollTop 值为 0。

示例:

<!DOCTYPE html>
<html>
<head>
    <title>scrollTop示例</title>
    <style type="text/css">
        #box {
            height: 200px;
            overflow: auto;
            border: 1px solid black;
        }
    </style>
</head>
<body>
    <div id="box">
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed est nisl, imperdiet eget ipsum vel, egestas mattis magna. Fusce tempus velit mauris, luctus pharetra metus congue vel. Duis mollis dapibus nunc, vel cursus lectus molestie vel. Proin imperdiet in orci ac fringilla. Aliquam condimentum faucibus tellus, ut ultrices tellus congue a. Donec nec tortor blandit, tincidunt sapien ut, auctor nisi. Quisque tempor bibendum metus, viverra convallis ex. Vivamus velit nunc, tristique at risus vitae, lacinia iaculis lacus. Sed euismod nibh vel ipsum sodales, vitae ultricies risus dictum. Sed hendrerit consequat quam, vitae sollicitudin magna vehicula eget. Praesent eleifend mauris a risus bibendum tincidunt. Etiam dapibus, erat vel bibendum mollis, tellus libero ullamcorper sapien, sed vestibulum augue libero vel quam. Nam blandit neque in ex sagittis, sed laoreet nibh sollicitudin. In hac habitasse platea dictumst.</p>
        <p>Donec elementum sapien ultricies tellus egestas dignissim. Nullam posuere elit a elit pharetra imperdiet. Nam vulputate ultrices lectus, vehicula sagittis eros congue eget. Phasellus egestas auctor tincidunt. Praesent congue in magna ac tempor. Duis semper, lectus in aliquet faucibus, quam dui congue ex, sed convallis nisl mi non mi. Nam dapibus sem quis velit facilisis, sit amet mollis ligula sollicitudin. Nullam ornare quam malesuada ante venenatis, vitae vulputate mi consequat. Quisque efficitur, sapien non dapibus finibus, velit risus malesuada nibh, eget malesuada orci justo vel elit. Mauris mauris lectus, pretium at nisi vel, aliquet pharetra mi. Aenean molestie varius augue non dictum. Etiam feugiat at magna eu congue. Nulla eget euismod justo. Praesent ut gravida velit.</p>
        <p>Vivamus vehicula metus risus, ac suscipit lacus mattis ac. Integer eget est gravida diam ornare mollis. Sed eleifend nec sem eget aliquet. Nunc malesuada, velit in tempor dapibus, diam neque viverra orci, ac pretium quam massa eu lorem. Aliquam ornare lacus eu ex interdum ultricies. Praesent eleifend nisl felis, in luctus massa tempus eget. Sed a bibendum nibh. Vivamus dictum, odio vitae imperdiet aliquam, sem tellus bibendum urna, ac tincidunt tellus erat sit amet augue. Nullam vel sapien in quam imperdiet tincidunt. In sed eros sit amet mi maximus mattis eu ut ligula. Ut ac faucibus urna. Sed luctus varius eros sed tincidunt. Sed tristique, magna non blandit elementum, odio quam placerat nunc, a commodo neque libero nec sapien.</p>
    </div>
    <script type="text/javascript">
        var box = document.getElementById('box');

        // 获取 box 元素的 scrollTop 值
        console.log(box.scrollTop); // 0

        // 设置 box 元素的 scrollTop 值
        box.scrollTop = 100;
        console.log(box.scrollTop); // 100
    </script>
</body>
</html>

offsetTop

offsetTop 属性返回当前元素上边缘相对于其 offsetParent 元素上边缘的距离(以像素为单位)。即使该元素被滚动了,该属性也不受影响。

示例:

<!DOCTYPE html>
<html>
<head>
    <title>offsetTop示例</title>
    <style type="text/css">
        #outer {
            position: relative;
            top: 100px;
            left: 100px;
            width: 200px;
            height: 200px;
            background-color: pink;
        }
        #inner {
            position: absolute;
            top: 50px;
            left: 50px;
            width: 100px;
            height: 100px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div id="outer">
        <div id="inner"></div>
    </div>
    <script type="text/javascript">
        // 获取 inner 的 offsetTop 值
        var inner = document.getElementById('inner');
        console.log(inner.offsetTop); // 150
    </script>
</body>
</html>

以上就是 top、clientTop、scrollTop、offsetTop 四个属性的详细区别说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 如何用JS/HTML将时间戳转换为“xx天前”的形式

    将时间戳转换为类似“xx天前”的形式是一个常见的需求。下面我来详细讲解如何用JS/HTML实现这个功能。 第一步:获取当前时间戳和目标时间戳 JavaScript内置了一个用于获取当前时间戳的方法,即: var now = Date.now(); 如果要将一个日期字符串转换为时间戳,可使用Date.parse方法,例如: var target = Date.…

    JavaScript 2023年5月27日
    00
  • JS实现的驼峰式和连字符式转换功能分析

    下面是详细讲解“JS实现的驼峰式和连字符式转换功能分析”的完整攻略。 1. 转换原理解析 1.1 驼峰命名法 驼峰命名法是一种命名规则,通常用来表示变量、函数、属性等的名称。它有以下特点: 单词之间用大写字母或首字母大写的字母分隔; 第一个单词的首字母小写或大写均可。 例如,firstName、NameList、myFunction等均为驼峰命名法的示例。 …

    JavaScript 2023年5月28日
    00
  • 基于element-ui 动态换肤的代码详解

    基于element-ui动态换肤的代码详解,其实主要是通过更改CSS样式来实现主题颜色的更换。 首先,我们需要借助element-ui提供的主题生成工具element-theme来生成我们需要的主题样式文件。 生成主题样式文件的具体步骤如下: 全局安装element-theme: npm install element-theme -g 在项目目录下新建th…

    JavaScript 2023年6月10日
    00
  • JavaScript弹出新窗口后向父窗口输出内容的方法

    下面是详细讲解“JavaScript弹出新窗口后向父窗口输出内容的方法”的完整攻略。 方法简介 在 JavaScript 中,我们可以通过打开一个新的窗口来向用户展示一些额外的内容或提供一些额外的功能,但在某些情况下,我们需要将这个新窗口的一些输出或处理结果返回到父窗口中。实现这个功能的方法有很多,下面介绍其中两种。 方法一:使用 window.opener…

    JavaScript 2023年5月28日
    00
  • 解析前端面试题2019年小米工程师面试题(附答案)

    这里给出详细讲解“解析前端面试题2019年小米工程师面试题(附答案)”的完整攻略。 前言 本文将对2019年小米工程师面试题进行分析和解答,其中涉及到的知识点基本全面,包括ES6、CSS、HTTP等内容。本文旨在帮助读者更深入理解前端知识,提高应对面试的能力。 攻略 下面按照题目出现顺序,逐个进行解答。 1. 给出题目vue的几种优化 该题目主要考察了对Vu…

    JavaScript 2023年5月19日
    00
  • JS面试题大坑之隐式类型转换实例代码

    针对“JS面试题大坑之隐式类型转换实例代码”这个主题,我会从以下几个方面展开攻略: 什么是隐式类型转换 JavaScript 是弱类型语言,它有一些隐式类型转换的规则,比如当进行数字类型和字符串类型运算时,JavaScript 会自动将其中一种类型转换成另一种,使得运算得以进行。这就是隐式类型转换。 那么,隐式类型转换会带来什么问题呢?我们很容易写出一些会出…

    JavaScript 2023年5月19日
    00
  • JS实现匀加速与匀减速运动的方法示例

    JS实现匀加速与匀减速运动的方法示例攻略如下: 一、匀加速运动 1. 获取元素并初始化 首先需要获取需要进行匀加速运动的元素,并初始化一些变量。假如我们要让一个div元素匀加速向右移动,可以使用如下代码: let box = document.querySelector(‘.box’); // 获取元素 let speed = 10; // 初始速度 let…

    JavaScript 2023年5月28日
    00
  • JavaScript仿京东实现秒杀倒计时案例详解

    下面是关于“JavaScript仿京东实现秒杀倒计时案例详解”的完整攻略。 1. 准备工作 在开始仿京东实现秒杀倒计时案例之前,我们需要做一些准备工作。具体如下: 在HTML文件中引入所需的CSS文件和JavaScript文件; 创建一个用于显示倒计时的HTML标签,并设置其id属性; 在JavaScript文件中获取该HTML标签的id属性值,利用docu…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部