JS原生DOM操作 - 获得元素/网页大小/元素宽高

news2024/11/26 13:31:53

文章目录

    • 获得元素的方法
    • 获取页面元素位置宽高
      • 概念
      • 方法
        • 获得网页/元素宽高
          • clientHeight和clientWidth:
          • scrollHeight和scrollWidth:
          • window.innerWidth:
          • element.style.width:
        • offsetXXX 获得网页元素的宽高和相对父元素位置(累加获得绝对位置)
        • 网页元素相对位置:绝对位置 + scrollLeft
        • 获得元素位置宽高的函数 getBoundingClientRect()
        • 获得元素宽高的函数 window.getComputedStyle(element)

获得元素的方法

通过ID来获取页面元素:
document.getElementById('id');

通过类名来获取页面元素:
document.getElementsByClassName('class');

通过标签名来获取页面元素:
document.getElementsByTagName('atg');

通过name属性获取页面元素(div默认没有name): 
<div name='xxx'></div>
document.getElementsByName('xxx');

H5新增的获取元素的方式
1、document.querySelector('选择器');       //获取满足条件的第一个元素 id带# 类带. 
2.document.querySelectorAll('选择器');         //获取满足条件的所有元素

直接通过标签获取,例如:body
document.body.样式.属性 = ‘值’;              //设置body元素的样式

获取页面元素位置宽高

概念

网页大小:整个网页的全部面积。
浏览器窗口大小(viewport视口):在浏览器窗口中看到的那部分网页面积。
如果网页的内容都能在浏览器窗口实现,则网页大小和浏览器大小是相同的。

方法

获得网页/元素宽高
clientHeight和clientWidth:

网页的每个元素都有clientHeight和clientWidth属性。这两个属性指元素的内容部分再加上padding的所占据的视觉面积,不包括border和滚动条所占空间
因此document的clientHeight和clientWidth属性就代表了网页的大小

// 网页大小
document.documentElement.clientWidth
// 元素宽高
let element = document.getElementById('example');
console.log(element.clientWidth, element.clientHeight);

在这里插入图片描述

scrollHeight和scrollWidth:

scrollHeight和scrollWidth属性提供了元素内容的整体宽度和高度,指包括滚动条在内的视觉面积(包括因溢出而未显示在屏幕上的部分)。那么,document对象的scrollHeight和scrollWidth属性就是网页的大小。
按理来说,如果网页能够在浏览器窗口全部显示,不出现滚动条,则网页的clientWidth和scrollWidth应该相等。但是实际上,不同浏览器有不同的处理,这两个值未必相等。我们要取两者中较大的。

// 网页大小
Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth)
// 元素宽高
let element = document.getElementById('example');
console.log(element.scrollWidth, element.scrollHeight);
window.innerWidth:

这两个属性是 JavaScript 中用于获取浏览器窗口(视口)的内部宽度和高度的。它们包括了滚动条的宽度。

// 网页大小
window.innerWidth window.innerHeight
element.style.width:

只能取到style属性里内定义的宽高,而不能取到css定义的宽高。

// 元素宽高
element.style.width element.style.height
offsetXXX 获得网页元素的宽高和相对父元素位置(累加获得绝对位置)

网页元素的绝对位置,指该元素的左上角相对于整张网页左上角的坐标。
每个元素都有offsetTop和offsetLeft属性,表示该元素的左上角与父容器(offsetParent对象)左上角的距离。所以,只需要将这两个值进行累加,就可以得到该元素的绝对坐标。
offsetWidth和offsetHeight返回元素的宽高,包括padding、border和滚动条(如果元素有滚动条),但不包括margin。

// 元素宽高
let element = document.getElementById('example');
console.log(element.offsetWidth, element.offsetHeight);

在这里插入图片描述

网页元素相对位置:绝对位置 + scrollLeft

网页元素的相对位置,指该元素左上角相对于浏览器窗口左上角的坐标。
有了绝对位置以后,获得相对位置就很容易了,只要将绝对坐标减去页面的滚动条滚动的距离就可以了。滚动条滚动的垂直距离,是document对象的scrollTop属性;滚动条滚动的水平距离是document对象的scrollLeft属性。
在这里插入图片描述

获得元素位置宽高的函数 getBoundingClientRect()

使用getBoundingClientRect()方法。它返回一个对象,其中包含了left、right、top、bottom四个属性,分别对应了该元素的左上角和右下角相对于浏览器窗口(viewport)左上角的距离。也包含了width和height属性,这些属性提供了元素的外部宽度和高度,包括border和padding。

相对位置:
  let X= this.getBoundingClientRect().left;
  let Y =this.getBoundingClientRect().top;
绝对位置:
  let X= this.getBoundingClientRect().left+document.documentElement.scrollLeft;
  let Y =this.getBoundingClientRect().top+document.documentElement.scrollTop;
元素宽高:
   let rect = document.getElementById('example').getBoundingClientRect();
   console.log(rect.width, rect.height);

目前,IE、Firefox 3.0+、Opera 9.5+都支持该方法,而Firefox 2.x、Safari、Chrome、Konqueror不支持。(看了下现在Chrome也不支持)

获得元素宽高的函数 window.getComputedStyle(element)

getComputedStyle是window上面的方法。

let dom = document.getElementById('app');
console.log(`${window.getComputedStyle(dom).width} + ${window.getComputedStyle(dom).height}`);

参考:
https://www.ruanyifeng.com/blog/2009/09/find_element_s_position_using_javascript.html
https://juejin.cn/post/7021519175898103845
chatgpt

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

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

相关文章

关于运行阿里云直播Demo pub get 报的错

flutter --version dart --version 如何使用Flutter框架推流_音视频终端 SDK(Apsara Video SDK)-阿里云帮助中心MediaBox音视频SDK下载指南_音视频终端 SDK(Apsara Video SDK)-阿里云帮助中心 终端输入 dart pub --trace get --no-precompile 打印详细报错信息 详细咨…

⭐Unity 里调用弹出电脑系统文件选择窗 (选择图片/文件)

今天遇到的需求要从Uinty里调用选择程序外的图片&#xff0c;类似手机环境下拿图库的照片一样。 效果如下: 话不多说 直接上代码&#xff01; 1.编辑器模式下 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using Syst…

Android Studio开发学习(六)———TableLayout(表格布局)、FrameLayout(帧布局)

目录 前言 一、Tablelayout &#xff08;一&#xff09;Tablelayout的相关简介 &#xff08;二&#xff09;TableLayout使用方法 1. 当TableLayout下面写控件、则控件占据一行的大小。(自适应一行&#xff0c;不留空白) 2.多个组件占据一行&#xff0c;则配合TableRow实现…

RocketMQ之Topic和Tag最佳实践

一、Topic是什么&#xff1f;它的作用&#xff1f; Topic即主题&#xff0c;是消息队列中用于对消息进行分类和组织的一种机制&#xff0c;它有以下三种作用&#xff1a; 标识消息分类&#xff1a;RocketMQ的主题用于对消息进行分类和组织。通过为不同类型的消息分配不同的主题…

FireProx:一款功能强大的AWS API网关管理与IP地址轮换代理工具

关于FireProx FireProx是一款功能强大的AWS API网关安全管理工具&#xff0c;该工具可以帮助广大研究人员创建实现唯一IP地址轮换的实时HTTP转发代理。 在发送网络请求或进行网络交互时&#xff0c;实现源IP地址轮换是一个非常复杂的过程&#xff0c;虽然社区中也有相关的工具…

ShardingSphere再回首

概念&#xff1a; 连接&#xff1a;通过协议 方言及库存储的适配&#xff0c;连接数据和应用&#xff0c;关注多模数据苦之间的合作 增量&#xff1a;抓取库入口流量题提供重定向&#xff0c; 流量变形(加密脱敏)/鉴权/治理(熔断限流)/分析等 可插拔&#xff1a;微内核 DDL:cr…

皮具5G智能制造工厂数字孪生可视化平台,推进企业数字化转型

皮具5G智能制造工厂数字孪生可视化平台&#xff0c;推进企业数字化转型。随着信息技术的快速发展&#xff0c;数字化转型已成为企业提升竞争力、实现可持续发展的关键路径。皮具行业&#xff0c;作为一个传统的手工制造业&#xff0c;正面临着巨大的市场变革和技术挑战。如何在…

(Java)数据结构——图(第十节)AOE网以及关键路径

目录 前言 AOE网 AOE网的两个性质&#xff1a; AOE网的五个时间 事件的最早发生时间Ve[k] 活动的最早开始时间E[i] 事件的最迟发生时间Vl[k] 活动的最晚开始时间L[i] 活动的时间余量 关于关键路径的缩短 代码实现思路 前言 本博客是博主用于复习数据结构以及算法的博…

蓝桥杯备赛刷题——css

新鲜的蔬菜 这题需要使用grid 我不会 去学一下 一.什么是grid Grid 布局与 Flex 布局有一定的相似性&#xff0c;都可以指定容器内部多个项目的位置。但是&#xff0c;它们也存在重大区别。 Flex 布局是轴线布局&#xff0c;只能指定"项目"针对轴线的位置&#…

(非技术) 基因遗传相关知识学习笔记

目录 一、基因遗传名词解释 二、什么叫显性遗传和隐性遗传&#xff1f; 三、如何确定遗传性质呢&#xff1f;是显性还是隐性&#xff1f; 四、常规例子1&#xff1a; 五、常规例子2&#xff1a; 六、实际案例&#xff1a; 七、思考题&#xff1a; 八、参考&#xff1a; …

【Redis深度解析】揭秘Cluster(集群):原理、机制与实战优化

Redis Cluster是Redis官方提供的分布式解决方案&#xff0c;通过数据分片与节点间通信机制&#xff0c;实现了水平扩展、高可用与数据容灾。本文将深入剖析Redis Cluster的工作原理、核心机制&#xff0c;并结合实战经验分享优化策略&#xff0c;为您打造坚实可靠的Redis分布式…

Qt QProcess详解

1.简介 QProcess提供了在 Qt 应用程序中启动外部程序的方法。通过QProcess&#xff0c;你可以启动一个进程&#xff0c;与它通信&#xff08;发送输入和读取输出&#xff09;&#xff0c;检查它的状态&#xff0c;以及等待它完成。这个类在执行系统命令、运行其他程序或脚本时…

铸铁试验平台和铸铁实验平台的主要区别在哪——北重制造厂家

铸铁试验平台和铸铁实验平台的主要区别在于其使用目的、实验内容和功能。 首先&#xff0c;铸铁试验平台主要用于铸铁工艺试验和工艺参数优化。通过模拟铸铁工艺过程&#xff0c;对不同工艺参数进行试验&#xff0c;从而得到最佳的铸铁工艺参数。铸铁试验平台一般具有温度控制、…

DL00295-基于AirSim仿真环境的无人机深度强化学习算法路径规划完整实现含详细说明文档

-创建了一个开放的AI Gym环境&#xff0c;包括多旋翼和固定翼无人机的运动学模型。 -提供了一些UE4环境来训练和测试深度强化学习DRL导航策略。 -基于AirSim和SB3。 完整代码链接见文末。 DL00295-基于AirSim仿真环境的无人机深度强化学习算法路径规划完整实现含详细说明文档

如何在前端项目中使用opencv.js | opencv.js入门

系列文章目录 如何在前端项目中使用opencv.js | opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js 如何从 public 路径加载人脸特征点检测模型tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图tensorflow.js 使用 opencv.js 将人脸…

docker 部署最新版 MySQL 实战

文章目录 前言简介第一步&#xff1a;搜索并拉取镜像1.1 搜索镜像1.2 拉取MySQL镜像1.3 查看MySQL镜像 第二步&#xff1a;生成MySQL容器2.1 运行MySQL镜像2.2 查看运行容器 第三步&#xff1a;验证服务可用性3.1 关闭防火墙3.2 连接MySQL 总结 前言 请各大网友尊重本人原创知…

独家原创 | Matlab实现INFO-BiTCN-BiGRU-Attention多输入单输出回归预测

独家原创 | Matlab实现INFO-BiTCN-BiGRU-Attention多输入单输出回归预测 目录 独家原创 | Matlab实现INFO-BiTCN-BiGRU-Attention多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现INFO-BiTCN-BiGRU-Attention向量加权算法优化双向时间卷积…

蓝桥杯 迷宫(bfs)

0迷宫 - 蓝桥云课 (lanqiao.cn) 思路 &#xff1a; 最后一定要倒数输出路径&#xff0c;因为从前面输出你会找不到下一个到底是谁&#xff0c;bfs过程是找最小路径&#xff0c;最后输出是去找方向&#xff0c;但是此题作为一个填空题&#xff0c;我直接手写&#xff08;开玩笑…

每日一题 — 将 x 减到 0 的最小操作数

思路&#xff1a; 题目要求是让我们从数组的最左端和最右端进行操作&#xff0c;这样的话解题的难度大大提升&#xff0c;我们可以用 正难则反 的思想&#xff1a; 题目中要求是减去数组中的数刚好等于X&#xff0c;我们可以转换成 数组中某一段的和等于 数组的总长减去X(sum -…

vue对比react18

1.模板语法-——>jsx JSX表达式用{}包裹&#xff0c;vue模板表达式用{{}}包裹&#xff0c;其余一致。 注意:if语句、switch语句、变量声明属于语句&#xff0c;不是表达式&#xff0c;不能出现在{}或{{}}中 <!--vue--> <template><div><p>I have…