首页 > 其他分享 >元素的三大系列

元素的三大系列

时间:2024-11-16 14:50:23浏览次数:3  
标签:返回 box 系列 log 元素 边框 console 三大

5.1、元素的三大系列

5.1.1、offset系列

5.1.1.1、offset初相识

使用offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等

  • 获得元素距离带有定位祖先元素的位置
  • 获得元素自身的大小(宽度高度)
  • 注意:返回的数值都不带单位

offset系列常用属性

offset系列属性

作用

element.offsetParent

返回作为该元素带有定位的父级元素,如果父级没有定位,则返回body

element.offsetTop

返回元素相对于有定位父元素上方的偏移量

element.offsetLeft

返回元素相对于有定位父元素左方的偏移量

element.offsetWidth

返回自身包括padding、边框、内容区的宽度、返回数值不带单位

element.offsetHeight

返回自身包括padding、边框、内容区的高度、返回数值不带单位

5.1.1.2、offset与style区别

offset

style

offset可以得到任意样式表中的样式值(行内,内部)

style只能得到行内样式表中的样式值

offset系列获得的数值时没有单位的

style.width获得的是带有单位的字符串

offsetWidth包含padding+border+width

style.width获得不包含padding和border的值

offsetWidth等属性时只读属性,只能获取不能赋值

style.width是可读写属性,可以获取也可以赋值

我们想要获取元素大小为止,用offset更合适

要给元素更改值,则需要用style改变

·····
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      .box {
        width: 200px;
        height: 200px;
        border: 1px solid red;
        margin: 50px auto;
        position: relative;
      }
      .box1 {
        width: 100px;
        height: 100px;
        background-color: orange;
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        right: 0;
        margin: auto;
      }
    </style>
  </head>
  <body>
    <div class="box">
      <div class="box1"></div>
    </div>
    <div class="box2" style="width: 50px; height: 50px; background-color: red; border: 10px solid green"></div>
    <script>
      var box = document.querySelector(".box");
      var box1 = document.querySelector(".box1");
      var box2 = document.querySelector(".box2");
      // 一、 通过offset获取值
      // 1、获取该元素带有定位的父级元素,如果父级没有定位,则返回body
      // console.log(box1.offsetParent, "offsetParent");
      // 2、返回元素相对于定位父元素上方的偏移量
      // console.log(box1.offsetTop, "offsetTop");
      // 3、返回元素相对于定位父元素左方的偏移量
      // console.log(box1.offsetLeft, "offsetLeft");
      // 4、返回自身的宽度(包括内容区,边框,padding)
      // console.log(box.offsetWidth, "offsetWidth");
      // 5、返回自身的高度(包括内容区,边框,padding)
      // console.log(box.offsetHeight, "offsetHeight");
      // 二、通过style获取值
      // 1、style只能获取行内样式表中的样式值
      // 不包括padding和border
      // console.log(box2.style.width); //50px
      //2、 可读可写
      // box2.style.width = "200px";
    </script>
·····

作业:

1、模态框拖拽

2、放大镜效果

5.1.2、client系列

5.1.2.1、client初相识

使用client系列的相关属性来获取元素可视区的相关信息,可以动态的得到该元素的边框大小,元素大小等

client系列属性

作用

element.clientTop

返回元素上边框的大小

element.clientLeft

返回元素左边框的大小

element.clientWidth

返回自身包括padding,内容区宽度,不含边框,返回数值不带单位

element.clientHeight

返回自身包括padding,内容区高度,不含边框,返回数值不带单位

  <head>
    <meta charset="UTF-8" />
    <title>client</title>
    <style>
      .box {
        width: 100px;
        height: 100px;
        background-color: red;
        border: 10px solid orange;
        padding: 20px;
        margin: 100px auto;
      }
    </style>
  </head>
  <body>
    <div class="box"></div>
    <script>
      var box = document.querySelector(".box");
      // 1、返回元素上边框大小
      //console.log(box.clientTop); //10
      // 2、返回元素左边框大小
      //console.log(box.clientLeft); //10
      // 3、返回自身的宽度,包括padding,内容区,不含边框
      // console.log(box.clientWidth); //140
      // 3、返回自身的高度,包括padding,内容区,不含边框
      // console.log(box.clientHeight); //140
    </script>
  </body>
5.1.2.2、client的应用-flexible.js解析
// 立即执行函数   传入window,document参数
(function flexible(window, document) {
  // 获取html根标签  我们是通过更改html根标签的大小来改变页面大小的
  var docEl = document.documentElement;
  // 获取物理像素比,window.devicePixelRatio获取当前的dpr值,如果没有就是1

  var dpr = window.devicePixelRatio || 1;

  // adjust body font size
  //设置body字体大小
  function setBodyFontSize() {
    // 如果页面中有body这个元素,就设置body的字体大小
    if (document.body) {
      document.body.style.fontSize = 12 * dpr + "px";
    } else {
      // 如果页面中没有body这个元素,则等着我们页面主要dom元素加载完后,设置页面字体大小
      document.addEventListener("DOMContentLoaded", setBodyFontSize);
    }
  }
  setBodyFontSize();

  // set 1rem = viewWidth / 10
  // 设置html元素的文字大小
  function setRemUnit() {
    // 将页面的大小平均划分为10等份,为整个页面的大小
    // 设置html根字体大小的变化
    var rem = docEl.clientWidth / 10;
    docEl.style.fontSize = rem + "px";
  }

  setRemUnit();

  // reset rem unit on page resize
  // 如果页面尺寸大小发生了变化,要重新设置rem大小
  window.addEventListener("resize", setRemUnit);
  // pageshow  是我们重新加载页面触发的事件
  window.addEventListener("pageshow", function (e) {
    //  如果是从缓存取过来的页面,也需要重新计算rem大小,为了兼容浏览器的
    if (e.persisted) {
      setRemUnit();
    }
  });

  // detect 0.5px supports
  // 有些移动端浏览器不支持0.5像素的写法, 通过一下代码,进行兼容
  if (dpr >= 2) {
    // 创建一个假的body元素,用于临时添加测试元素以检测某些样式效果
    var fakeBody = document.createElement("body");
    // 创建一个测试用的div元素
    var testElement = document.createElement("div");
    // 设置测试元素的边框样式,目的是检测在当前环境下边框的实际渲染高度
    testElement.style.border = ".5px solid transparent";
    // 将测试元素添加到假body中
    fakeBody.appendChild(testElement);
    // 将假body添加到文档的body元素中,以便在当前页面环境中渲染测试元素
    docEl.appendChild(fakeBody);

    // 检测测试元素的渲染高度是否为1,这可以用来判断设备的像素比或浏览器的渲染特性
    if (testElement.offsetHeight === 1) {
      // 如果测试元素的高度为1,表明可能存在高像素比屏幕或其他渲染特性
      // 在这种情况下,为docEl添加类名"hairlines",以便通过CSS提供更合适的样式
      docEl.classList.add("hairlines");
    }

    // 清理测试元素,移除假body,以避免对页面其他部分造成潜在影响
    docEl.removeChild(fakeBody);
  }
})(window, document);

5.1.3、scroll系列

5.1.3.1、 scroll初相识

利用scroll系列的相关属性可以动态的得到该元素的大小,滚动距离等

scroll系列属性

作用

element.scrollTop

返回被卷去的上侧距离,返回数值不带单位

element.scrollLeft

返回被卷去的左侧距离,返回数值不带单位

element.scrollWidth

返回自身实际的宽度(实际内容的宽度),不含边框,返回数值不带单位

element.scrollHeight

返回自身实际的高度(实际内容的宽度),不含边框,返回数值不带单位

  <head>
    <meta charset="UTF-8" />
    <title>scroll</title>
    <style>
      .box1 {
        width: 200px;
        height: 200px;
        background-color: #bfa;
        border: 10px solid red;
        padding: 20px;
        overflow: auto;
      }
      p {
        width: 400px;
        height: 400px;
        background-color: orange;
      }
    </style>
  </head>
  <body>
    <div class="box1">
      <p>其那了,种法苟反作。</p>
    </div>
    <script>
      var box = document.querySelector(".box1");
      // 1、返回自身实际的宽度(实际内容的宽度),不含边框,返回数值不带单位
      // console.log("scrollWidth", box.scrollWidth);
      // console.log("clientWidth", box.clientWidth);
      // 2、返回自身实际的高度(实际内容的宽度),不含边框,返回数值不带单位
      // console.log("scrollHeight", box.scrollHeight);
      // console.log("clientHeight", box.clientHeight);
      // 3、返回被卷去的上侧距离,返回数值不带单位
      // console.log("scrollTop", box.scrollTop);
      // 4、返回被卷去的左侧距离,返回数值不带单位
      // console.log("scrollLeft", box.scrollLeft);
      
      // 滚动事件触发时,打印被卷去的距离
      // box.addEventListener("scroll", function () {
      //   console.log("scrollTop", box.scrollTop);
      //   console.log("scrollLeft", box.scrollLeft);
      // });
    </script>
  </body>
5.1.4、小结

三大系列大小对比

作用

element.offsetWidth

返回自身包括padding,边框,内容区的宽度,返回数值不带单位

element.clientWidth

返回自身包括padding,内容区宽度,不含边框,返回数值不带单位

element.scrollWidth

返回自身实际宽度,不含边框,返回数值不带单位

offset系列进行用于获得元素位置 offsetLeft offsetTop

client经常用于获取元素大小 clientWidth clientHeight

sroll经常用于获取滚动距离 scrollTop

事件对象的相关大小:

标签:返回,box,系列,log,元素,边框,console,三大
From: https://blog.csdn.net/Aming_888/article/details/143817253

相关文章

  • 【ARM CoreLink 系列 1 -- SoC 架构 总线 互联(interconnect) 介绍】
    概述在摩尔定律的推动下,集成电路工艺取得了高速发展,单位面积上的晶体管数量不断增加。片上系统(System-on-Chip,SoC)具有集成度高、功耗低、成本低等优势,已经成为大规模集成电路系统设计的主流方向,解决了通信、图像、计算、消费电子等领域的众多挑战性的难题。随着片上系统SoC的应......
  • cmake系列-怎么处理C++仅标头库
    这篇文章讲一下cmake怎么处理C++仅标头库,什么叫仅标头库呢,顾名思义,就是只有头文件的程序库。来看这么一个demo这个demo里面有demoA和demoB两个项目,其中demoA是一个仅标头库,demoB使用demoA提供的库。我们知道仅标头库是不能编译成程序目标的,当然用cmake处理也不可能违背......
  • javaScript交互补充(元素的三大系列)
    1、元素的三大系列1.1、offset系列1.1.1、offset初相识使用offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等获得元素距离带有定位祖先元素的位置获得元素自身的大小(宽度高度)注意:返回的数值都不带单位offset系列常用属性offset系列属性作用element.offset......
  • 【python系列】python数据类型之字符串
    1.前言字符串是编程中最常用的数据类型,这章需要针对字符串进行讲解。字符串的定义:字符串(英语:string),是由零个或多个字符组成的有限序列。——Wikipediapython官方文档:https://docs.python.org/zh-cn/3.10/library/stdtypes.html#text-sequence-type-str字符串是由Un......
  • 代码随想录算法训练营day47| 739. 每日温度 496.下一个更大元素 I 503.下一个
    学习资料:https://programmercarl.com/0739.每日温度.html#算法公开课单调栈:用数组模拟单调栈,今天的题中,栈中元素都保存的索引值基本思路:将新元素和栈顶索引对应值比较,如果要保持单调递增,则需要新元素不大于栈顶索引对应值;若满足就加入新元素索引到栈中;若不满足,就根据具体题意看......
  • AI时代下,哪些工作是无法替代的?你需要了解的三大核心领域
    文章目录前言一、创造性的工作:AI的边界在哪里?二、情感劳动:AI无法触及的人类温度三、复杂决策与战略规划:AI的局限性未来不可或缺的两大技能总结前言随着人工智能(AI)技术的飞速发展,许多行业和职业正面临前所未有的变革。自动化和AI系统的普及显然将重塑大量......
  • 杭州市公安局打造“清风明月说反诈”系列视频,守好市民“钱袋子”
    为进一步加强辖区群众的反诈防骗意识,提升反诈宣传效率。杭州市公安局推出“清风明月说反诈”系栏目,借助有言的AIGC视频生成能力,高效率制作多场景的反诈宣传视频,升级传统视频制作方式,展示了AI技术在反诈宣传科普以及公共安全社会治理中的巨大价值。没有使用AI视频工具之前,传统......
  • Stream流统计集合元素出现次数并降序
    使用Arrays.stream()结合Collectors.groupingBy()和Collectors.counting()来统计数组中每个元素出现个数,按照出现次数降序排列后获取前五个元素及其出现次数的示例代码:importjava.util.*;importjava.util.stream.Collectors;publicclassArrayElementCountTopFive{......
  • React系列一:创建React项目
    文章目录NPM安装React检查是否安装Node.js和npm检查拉取仓库是否使用国内并设置国内使用create-react-app快速构建React开发环境项目结构src下的index.js和index.csssrc下的App.js和App.cssApp.js挂载新组件NPM安装React检查是否安装Node.js和npmnode-vnpm-v......
  • 精通rust宏系列教程-入门篇
    Rust最令人敬畏和强大的特性之一是它使用和创建宏的能力。不幸的是,用于创建宏的语法可能相当令人生畏,并且对于新开发人员来说,这些示例可能会令人不知所措。我向你保证Rust宏非常容易理解,本文将为你介绍如何创建自己的宏。什么是Rust宏?println!("hello{}",name)如果......