javaScript:DOM中常用尺寸

news2024/10/7 12:19:41

目录

前言(可以根据图示找到需要的尺寸,便于理解)

内尺寸

clientWidth 包含左右padding和宽度width(忽略滚动条的宽度)

clientHeight 包含上下padding和height(忽略滚动条的高度)

clientTop 获取元素上边框的大小

clientLeft 获取元素左边框的大小

外尺寸 

offsetWidth 包含左右padding 和 width 以及 border,包含滚动条宽度

offsetHeight 包含上下padding 和 height 以及border ,包含滚动条高度

 offsetParent:获取当前元素对象具有定位属性的父级元素

offsetLeft 指的是 当前元素的左边框距离  offsetParent 左边框的距离

offsetTop 指的是 当前元素的上边框距离  offsetParent 上边框的距离

相关代码 (重在理解)

滚动尺寸(案例中会用到,常用)

滚动尺寸scrollWidth( scrollHeight )(重点理解)

垂直滚动条与元素顶部距离scrollTop

水平滚动条与元素左边距离 scrollLeft

相关代码 

案例(要理解)

1.缓慢回到顶部

效果图

相关代码(代码较长,且注释比较详细不在逐行讲解,重点掌握实现的思路和对知识点的运用)

2.懒加载(会单独写一篇文章来讲)


前言(可以根据图示找到需要的尺寸,便于理解)

      在js中我们可以通过dom操作获取想要得到的尺寸,并对其进行一系列操作使其可以帮助我们实现动态布局、响应式设计、动画效果、碰撞检测等一系列功能。在这篇文章中,我们将了解常用的dom尺寸,并配合相关案例,来帮助我们了解和掌握这部分知识。

内尺寸

内尺寸

clientWidth 包含左右padding和宽度width(忽略滚动条的宽度)

clientHeight 包含上下padding和height(忽略滚动条的高度)

clientTop 获取元素上边框的大小

clientLeft 获取元素左边框的大小

外尺寸 

外尺寸(常用)

offsetWidth 包含左右padding 和 width 以及 border,包含滚动条宽度

offsetHeight 包含上下padding 和 height 以及border ,包含滚动条高度

 offsetParent:获取当前元素对象具有定位属性的父级元素

 offsetParent:获取当前元素对象具有定位属性的父级元素,如果所有的父级元素都没 定位属性,那么在标准浏览器下,offsetParent 指的是body,ie下是html

body和html 的offsetParent 都是null

offsetLeft 指的是 当前元素的左边框距离  offsetParent 左边框的距离

offsetTop 指的是 当前元素的上边框距离  offsetParent 上边框的距离

相关代码 (重在理解)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>dom中常用尺寸</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .wp{
            width: 300px;
            height: 300px;
            border: 10px #f00 solid;
            padding: 10px;
            margin: 20px auto;
            overflow: auto;
        }
        .far{
            width: 600px;
            margin: 20px auto;
            border: 10px #f60 solid;
            padding: 50px 0;
            position: relative;
        }
    </style>
</head>
<body>
    <div class="far">
    <div class="wp">
        豫章故郡,洪都新府,星分翼轸,地接衡庐豫章故郡,洪都新府,星分翼轸,地接衡庐
        豫章故郡,洪都新府,星分翼轸,地接衡庐豫章故郡,洪都新府,星分翼轸,地接衡庐
        豫章故郡,洪都新府,星分翼轸,地接衡庐豫章故郡,洪都新府,星分翼轸,地接衡庐
        豫章故郡,洪都新府,星分翼轸,地接衡庐豫章故郡,洪都新府,星分翼轸,地接衡庐
        豫章故郡,洪都新府,星分翼轸,地接衡庐豫章故郡,洪都新府,星分翼轸,地接衡庐
        豫章故郡,洪都新府,星分翼轸,地接衡庐豫章故郡,洪都新府,星分翼轸,地接衡庐
        豫章故郡,洪都新府,星分翼轸,地接衡庐豫章故郡,洪都新府,星分翼轸,地接衡庐
        豫章故郡,洪都新府,星分翼轸,地接衡庐豫章故郡,洪都新府,星分翼轸,地接衡庐
        豫章故郡,洪都新府,星分翼轸,地接衡庐豫章故郡,洪都新府,星分翼轸,地接衡庐

    </div>
    </div>
</body>
</html>
<script>
    let wp = document.querySelector('.wp')
    /*
    内尺寸
    clientWidth 包含左右padding和宽度width(忽略滚动条的宽度)
    clientHeight 包含上下padding和height(忽略滚动条的高度)
    clientTop 获取元素上边框的大小
    clientLeft 获取元素左边框的大小

    外尺寸
    offsetWidth 包含左右padding 和 width 以及 border,包含滚动条宽度
    offsetHeight 包含上下padding 和 height 以及border ,包含滚动条高度

    offsetParent:获取当前元素对象具有定位属性的父级元素,如果所有的父级元素都没
    定位属性,那么在标准浏览器下,offsetParent 指的是body,ie下是html
    body和html 的offsetParent 都是null

    offsetLeft 指的是 当前元素的左边框距离  offsetParent 左边框的距离
    offsetTop 指的是 当前元素的上边框距离  offsetParent 上边框的距离
    */
   console.log(wp.clientWidth,wp.clientHeight,wp.clientTop,wp.clientLeft);
   let body = document.body;
   console.log(body.clientWidth,body.clientHeight);


   console.log(wp.offsetWidth,wp.offsetHeight);

   //获取当前元素的定位父元素
   console.log(wp.offsetParent,wp.offsetLeft,wp.offsetTop);
</script>

滚动尺寸(案例中会用到,常用)

滚动尺寸scrollWidth( scrollHeight )(重点理解)

scrollWidth滚动尺寸 返回值,当子级元素内容宽度大于 目标元素内容宽度的时候,那么

scrollWidth=子级盒模型的宽度+左右padding  ; 当子级元素内容宽度小于目标元素内容的时候

    scrollWidth = width + 左右padding

    scrollHeight 和 scrollWidth一致

垂直滚动条与元素顶部距离scrollTop

scrollTop  垂直滚动条与元素顶部距离,可以理解为元素内容被卷上去的高度,可以设置该值

水平滚动条与元素左边距离 scrollLeft

    scrollLeft 水平滚动条与元素左边距离,可以理解为元素内容被卷到左边的宽度,可以设置该值

相关代码 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>滚动尺寸</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .wp{
            width: 400px;
            height: 400px;
            border: 1px #000 solid;
            overflow: auto;
            padding: 0 30px;
        }
        .cont{
            width: 800px;
            height: 800px;
            background: pink;

        }
        #toTop{
            width: 60px;
            height: 60px;
            background-color: pink;
            text-align: center;
            line-height: 30px;
            position: fixed;
            right: 10px;
            bottom: 10px;
            cursor: pointer;
            user-select: none;
        }
    </style>
</head>
<body>
    <div class="wp">
        <div class="cont">
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
            滕王高阁临江,飞羽阿打卡搭嘎含税单价<br>
        
        </div>
    </div>
    <button id="btn">点击获取卷上去的高度</button>
    <div style="height: 2000px;"></div>
    <span id="toTop">回到 <br> 顶部</span>
</body>
</html>
<script>
    /*
    scrollWidth滚动尺寸 返回值,当子级元素内容宽度大于 目标元素内容宽度的时候,那么
    scrollWidth=子级盒模型的宽度+左右padding  ; 当子级元素内容宽度小于目标元素内容的时候
    scrollWidth = width + 左右padding

    scrollHeight 和 scrollWidth一致

    scrollTop  垂直滚动条与元素顶部距离,可以理解为元素内容被卷上去的高度,可以设置该值

    scrollLeft 水平滚动条与元素左边距离,可以理解为元素内容被卷到左边的宽度,可以设置该值
    */
   let wp = document.querySelector('.wp') 
   let btn = document.querySelector('#btn')
   console.log(wp.scrollWidth,wp.scrollHeight,wp.scrollTop);
   btn.onclick=function(){
    wp.scrollTop = 400;
    console.log(wp.scrollTop);
   }
   //回到顶部
   let timmer;
   let totop= document.querySelector('#toTop')
   toTop.onclick = function(){
    //首先获取卷上去的高度
      clearInterval(timmer)
      timmer = setInterval(function(){
        let h = document.documentElement.scrollTop;
        console.log(h);
        if(h>0){
            h-=100;
            document.documentElement.scrollTop == h;
        }else{
            document.documentElement.scrollTop == 0;
            clearInterval(timmer)
        }

      },20);
   }
</script>

案例(要理解)

1.缓慢回到顶部

效果图

相关代码(代码较长,且注释比较详细不在逐行讲解,重点掌握实现的思路和对知识点的运用)

<!DOCTYPE html>
<html>
<head>
  <title>回到顶部</title>
  <style>
    #backToTop {
      position: fixed;
      bottom: 20px;
      right: 20px;
      width: 50px;
      height: 50px;
      background-color: #333;
      color: #fff;
      font-size: 20px;
      text-align: center;
      line-height: 50px;
      cursor: pointer;
      opacity: 0.7;
      transition: opacity 0.3s;
    }

    #backToTop:hover {
      opacity: 1;
    }
    .wp{
        height: 3000px;
        width: 1200px;
        background-color: pink;
    }
  </style>
</head>
<body>
  <div id="content">
    <!-- Your page content here -->
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    <!-- ... -->
  </div>
    <div class="wp">

    </div>
  <div id="backToTop">^</div>

  <script>
    // 获取“回到顶部”按钮元素
    var btn = document.getElementById("backToTop");

    // 添加点击事件监听
    btn.addEventListener("click", function() {
      // 获取当前滚动位置
      var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

      // 定义一个动画函数
      function scrollToTop() {
        // 计算每一帧滚动的距离
        var scrollStep = Math.max(scrollTop / 30, 10);

        // 获取当前滚动位置
        var currentScrollTop = document.documentElement.scrollTop || document.body.scrollTop;

        // 如果还没有到达顶部,则继续滚动
        if (currentScrollTop > 0) {
          // 计算下一帧的滚动位置
          var newScrollTop = currentScrollTop - scrollStep;
          // 设置滚动位置
          document.documentElement.scrollTop = newScrollTop;
          document.body.scrollTop = newScrollTop;

          // 使用 setTimeout 调用下一帧滚动
          setTimeout(scrollToTop, 10);
        }
      }

      // 启动滚动动画
      scrollToTop();
    });

    // 监听页面滚动事件,控制按钮的显示与隐藏
    window.addEventListener("scroll", function() {
      var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
      if (scrollTop > 300) {
        btn.style.display = "block";
      } else {
        btn.style.display = "none";
      }
    });
  </script>
</body>
</html>

2.懒加载(会单独写一篇文章来讲)

        对于懒加载的内容,我会单独写一篇文章进行详细介绍,以便更好地解释懒加载的概念、原理和使用方法,并综合使用DOM尺寸的情况进行说明。期待您的关注和期待!在文章完成后,我将很高兴为您提供反馈或帮助。谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/976801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postman json复杂数据的模拟

先设置路径 然后可以定义下边数据&#xff08;Key value&#xff09; 也可以不定义 看你的情况 [{"mac": "4C-77-66-19-50-65","addressPattern": "98jd","platform": "ios","registrationId": "…

国内免费无限制的chatgpt导航和ai画画

非常实用的AI网址导航&#xff0c;其实际使用体验非常便捷。该导航系统不仅提供了全面的网站分类和搜索功能&#xff0c;还对每个网站进行了精准的评估和排序。推荐高质量的网站资源&#xff0c;并实时检测网站的安全性&#xff0c;保障用户的上网安全。 总的来说&#xff1a…

KaiwuDB 受邀亮相 2023 中国国际“软博会”

8月31日&#xff0c;第二十五届中国国际软件博览会&#xff08;以下简称“软博会”&#xff09;在天津盛大开幕。KaiwuDB 受邀亮相展会&#xff0c;围绕“塑造软件新生态&#xff0c;赋能发展新变革”主题&#xff0c;重点展示自研分布式多模数据库及各大行业解决方案&#xff…

Docker Part01:Docker简介

文章目录 1 虚拟化技术2 Docker概述2.1 Docker能解决的问题2.2 Docker介绍2.3 为什么使用Docker2.4 Docker特点2.5 Docker应用场景 3 Docker与虚拟机对比3.1 Docker和虚拟机组成结构3.2 Docker和虚拟机的不同点 4 Docker基本概念4.1 Docker引擎4.2 Docker基本架构4.3 Docker容器…

地图投影——1 投影目录

地图投影示例说明亚当斯方形 II该投影以方形显示世界。该投影为等角投影&#xff0c;但方形的四个角除外。埃托夫该折衷改进的方位投影采用椭圆的形式。该投影主要用于世界地图。阿尔伯斯该等积圆锥投影最适合用于中纬度东西方向分布的大陆板块。方位自适应圆柱该折衷的地图投影…

ToBeWritten之ATTCK 测评方案

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

FLUX查询InfluxDB -- InfluxDB笔记三

1. 入门 from(bucket: "example_query") // 没有筛选条件直接查询会报错|> range(start: -1h) // |>是管道符&#xff0c;后跟筛选条件 2. 序列、表和表流 序列是InfluxDB的概念&#xff0c;一个序列是由measurement、标签集、一个字段名称 表流是FLUX为了…

基于FPGA的信号发生器(三角波、方波、正弦波)

目录 DDS实现原理 DDS整体设计框图​ Quartus II 仿真​ modelsim仿真 顶层代码 DDS实现原理 DDS(Direct Digital Frequency Synthesizer)直接数字频率合成器,也可叫DDFS。 DDS是从相位的概念直接合成所需波形的一种频率合成技术。 不仅可以产生不同频率的正弦波,而且可…

算法 数据结构 递归冒泡算法 java冒泡算法 优化递归冒泡 数据结构(九)

使用递归算法实现冒泡&#xff1a; package com.nami.algorithm.study.day06;import java.util.Arrays;/*** beyond u self and trust u self.** Author: lbc* Date: 2023-09-05 15:36* email: 594599620qq.com* Description: keep coding*/ public class BubbleSort2 {// p…

windows server 2019 使用powershell静默安装netframework3.5

参考链接 使用 Windows PowerShell 启用 .NET Framework 3.5 | Microsoft Learn 对于未连接到 Internet 的 Windows Server 2012 或更高版本的安装&#xff0c;可使用 Windows PowerShell 来添加 .NET Framework 3.5&#xff0c;提供对安装介质上的 \sources\sxs 文件夹的访问…

NIFI实现数据库数据增量同步

说明 nifi版本&#xff1a;1.23.2&#xff08;docker镜像&#xff09; 需求背景 将数据库中的数据同步到另一个数据库中&#xff0c;要求对于新增的数据和历史有修改的数据进行增量同步 模拟数据 建表语句 源数据库和目标数据库结构要保持一致&#xff0c;这样可以避免后…

什么是数字体验平台

数字体验平台是一种基于数字技术的工具或系统&#xff0c;旨在提供用户与产品、服务或品牌进行交互和体验的场所。它通过结合多种数字化技术&#xff0c;如人工智能、大数据、云计算、物联网等&#xff0c;为用户提供个性化、多维度的体验。 数字体验平台可以为企业或组织搭建一…

Flutter实现ControlExecutor进行多个异步任务执行时监听状态并可指定最后执行的异步并在指定的异步执行完毕后结束executor并回调。

1.场景 当有多个接口请求时&#xff0c;且接口调用不是同时进行时&#xff0c;而且接口调用有可能时链式的&#xff0c;中间也有可能加入别的逻辑&#xff0c;但是需要在第一个接口调用时打开等待框&#xff0c;在最后一个接口调用完成时关闭等待框类似需求时&#xff0c;可以…

Spark 6:Spark SQL DataFrame

SparkSQL 是Spark的一个模块, 用于处理海量结构化数据。 SparkSQL是用于处理大规模结构化数据的计算引擎 SparkSQL在企业中广泛使用&#xff0c;并性能极好 SparkSQL&#xff1a;使用简单、API统一、兼容HIVE、支持标准化JDBC和ODBC连接 SparkSQL 2014年正式发布&#xff0c;当…

java调用js文件的两种方法(支持V8引擎)

前言 对java逆向感兴趣的盆友可以关注我以前的文章&#xff0c;有图片验证码识别、AES、SHA256等各种加密的java实现&#xff0c;不定时更新常用算法和加密&#xff0c;欢迎一起交流讨论&#xff01; 在日常逆向中&#xff0c;一些前端的加密代码用java复现出来比较难&#xff…

使用工作流快速开发平台,做好企业数据资源管理!

面对越来越繁忙的业务&#xff0c;很多客户朋友不知道用什么样的平台才能快速处理好企业内部数据&#xff0c;做出更有利于企业发展的经营决策。其实&#xff0c;低代码技术平台、工作流快速开发平台是可以让企业减少重复工作&#xff0c;提高工作效率&#xff0c;实现流程化办…

中断处理原理:接口及按键驱动

一、什么是中断 一种硬件上的通知机制&#xff0c;用来通知CPU发生了某种需要立即处理的事件 分为&#xff1a; 内部中断 CPU执行程序的过程中&#xff0c;发生的一些硬件出错、运算出错事件&#xff08;如分母为0、溢出等等&#xff09;&#xff0c;不可屏蔽外部中断 外设发…

自动计算比例 计算属性 computed @input=“rate“

<el-col :span"12"><el-form-item label"当年累计实收租金:" prop"cumulativeRent"><el-inputv-model"createForm.cumulativeRent"input"rate"clearable:disabled"value 2"><template slot…

如何将MySQL中指定的表结构同步到人大金仓数据库

场景 刚开始做数据库适配的时候,这是一个棘手的问题,因为MySQL的库里,表结构,字段都是最新的,但是金仓的库,全是旧版本的表结构。需要把我们模块的表结构,同步到金仓中。 虽然金仓有数据库同步工具,但是直接把所有表都给同步过来,难免会影响到其他模块。 然后…

HCIP学习-IPv6

目录 前置学习内容 IPv6解决的一些IPv4的缺陷 无限的地址 层次化的地址结构 即插即用 简化报文头部 IPv4和IPv6报头比较 端到端的网络罗完整性 安全性增强 挣钱QoS特性 IPv6地址介绍 格式 首选格式 压缩格式 内嵌IPv4地址格式的IPv6地址格式 IPv6的网络前缀和接…