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

关于 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日

相关文章

  • TypeScript中的交叉类型和联合类型示例讲解

    在TypeScript中,交叉类型和联合类型是两个非常重要的概念,它们可以让我们在代码中更好地使用类型约束。 什么是交叉类型和联合类型 在介绍示例之前,先来简要解释一下交叉类型和联合类型的概念。 交叉类型:通过将多个类型合并成一个类型来创建新的类型。交叉类型使用&符号进行连接,表示同时具有多种类型的特性。 联合类型:表示一个值可以是多种类型之一。联合…

    JavaScript 2023年6月10日
    00
  • JavaScript的各种常见函数定义方法

    JavaScript 是当前 Web 开发中最广泛使用的脚本语言之一,其强大的函数定义能力在 Web 开发中也经常被运用。这里我们来介绍几种 JavaScript 常见函数定义方法的完整攻略,帮助大家更好地掌握 JavaScript 函数定义。 函数声明 函数声明是定义 JavaScript 函数的最常见和最基础方式之一。它的语法如下: function f…

    JavaScript 2023年5月27日
    00
  • 菜鸟是如何变成ASP木马高手的!

    菜鸟变成ASP木马高手攻略 想要成为一个ASP木马高手,需要掌握以下几个步骤: 第一步:了解ASP木马基础概念 ASP木马是一种通过修改ASP网站脚本文件(如.asp、.aspx等)来实现控制网站的方式。经过特殊构建的ASP木马可以将一些命令或代码写入对应的ASP文件中,以实现后门、数据窃取、Webshell攻击等多种功能。 第二步:掌握ASP木马生成工具 …

    JavaScript 2023年6月11日
    00
  • WinForm使用正则表达式提取内容的方法示例

    WinForm使用正则表达式提取内容的方法示例 什么是正则表达式 正则表达式(Regular Expression),是一种文本模式,用来匹配、替换一些文本。 WinForm中正则表达式的使用 在WinForm中,我们可以通过使用System.Text.RegularExpressions命名空间提供的正则表达式类进行文本的匹配和替换。 使用步骤如下: 引用…

    JavaScript 2023年6月10日
    00
  • 如何在 Vue 中使用 JSX

    当我们使用Vue框架开发的时候,我们通常会使用Vue模板语法来构建用户界面。但是在某些情况下,我们可能需要使用JSX来构建用户界面。JSX提供了更好的可读性和可维护性,并且可以直接使用原生JavaScript语法。下面是如何在Vue中使用JSX的完整攻略: 1. 安装依赖 首先,我们需要安装vue和babel-plugin-jsx两个依赖: npm inst…

    JavaScript 2023年6月10日
    00
  • js正则表达式简单校验方法

    首先我们需要了解什么是正则表达式,正则表达式一般用于字符串的处理和匹配,可以用来进行字符串的查找、替换、分割等操作。在JavaScript中,可以通过RegExp对象来创建正则表达式。 接下来,我将详细讲解“js正则表达式简单校验方法”的完整攻略: 1. 创建正则表达式对象 在使用正则表达式之前,需要先创建一个正则表达式对象,可以使用字面量或者构造函数来创建…

    JavaScript 2023年6月10日
    00
  • 详解JavaScript基于面向对象之创建对象(2)

    首先,你需要了解JavaScript中面向对象编程的概念。在JavaScript中,我们可以通过构造函数和原型链来实现面向对象编程。 第二篇文章“详解JavaScript基于面向对象之创建对象(2)”主要介绍了通过原型链来创建对象的方式。具体内容包括: 原型链是什么? 原型链是一种由多个对象组成的链式结构,这些对象通过原型链相互关联,在其中可以共享属性和方法…

    JavaScript 2023年5月27日
    00
  • js console.log打印对象时属性缺失的解决方法

    当我们在JavaScript中使用console.log打印一个对象时,可能会发现某些属性没有被打印出来。这通常是由于对象里的属性只有在我们需要访问它们时才被计算出来,或者是因为它们被标记为不可枚举的。以下是解决这个问题的两个方法: 方法一:使用JSON.stringify JSON.stringify可以将对象解析成一个字符串,包括不可枚举属性,因此我们可…

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