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

文章目录

    • 获得元素的方法
    • 获取页面元素位置宽高
      • 概念
      • 方法
        • 获得网页/元素宽高
          • 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

有道词典网页版接口分析与爬虫研究

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、目标站点 有道词典网页版&#xff1a;网易有道 二、目标接口 url&#xff1a;https://dict.youdao.com/jsonapi_s?doctypejson&…

通过8种加锁情况来弄懂加锁对于线程执行顺序的影响

1个资源类对象&#xff0c;2个线程&#xff0c;2个同步方法&#xff0c;第二个线程等待1s后开启。 //资源类 public class Example {//2个同步方法public synchronized void method1(){System.out.println("线程1正在执行...");}public synchronized void method2()…

(2022级)成都工业学院数据库原理及应用实验三:数据定义语言DDL

唉&#xff0c;用爱发电连赞都没几个&#xff0c;博主感觉没有动力了 想要完整版的sql文件的同学们&#xff0c;点赞评论截图&#xff0c;发送到2923612607qq,com&#xff0c;我就会把sql文件以及如何导入sql文件到navicat的使用教程发给你的 基本上是无脑教程了&#xff0c;…

Banana Pi BPI-M7 RK3588开发板运行RKLLM软件堆AI大模型部署

关于Banana Pi BPI-M7 Banana Pi BPI-M7 采用Rockchip RK3588&#xff0c;板载8/16/32G RAM内存和 64/128G eMMC存储&#xff0c;支持无线wifi6和蓝牙5.2。2x2.5G网络端口&#xff0c;1个HDMIout标准 输出口&#xff0c;2x USB3.0&#xff0c;2xTYPE-C&#xff0c;2x MIPI CSI…

Day96:云上攻防-云原生篇Docker安全系统内核版本漏洞CDK自动利用容器逃逸

目录 云原生-Docker安全-容器逃逸&系统内核漏洞 云原生-Docker安全-容器逃逸&docker版本漏洞 CVE-2019-5736 runC容器逃逸(需要管理员配合触发) CVE-2020-15257 containerd逃逸(启动容器时有前提参数) 云原生-Docker安全-容器逃逸&CDK自动化 知识点&#xff1…

Vue3基础语法

在这个章节中&#xff0c;简单的看下Vue3的基础语法&#xff0c;有了这些基础后&#xff0c;对写vue3单页也就没有什么问题了。 模板语法 在写html时&#xff0c;我们希望在某个节点绑定一个动态值时&#xff0c;是使用dom操作执行的&#xff0c;如下&#xff1a; <!DOCT…

(Java)数据结构——排序(第一节)堆排序+PTA L2-012 关于堆的判断

前言 本博客是博主用于复习数据结构以及算法的博客&#xff0c;如果疏忽出现错误&#xff0c;还望各位指正。 堆排序&#xff08;Heap Sort&#xff09;概念 堆排序是一种基于堆数据结构的排序算法&#xff0c;其核心思想是将待排序的序列构建成一个最大堆&#xff08;或最小…

大模型+交通治理,高德地图“评诊治”系统迎来全新升级

近日&#xff0c;由中国道路交通安全协会主办的第十四届中国国际道路交通安全产品博览会暨公安交警警用装备展(以下简称交博会)在厦门国际会展中心开幕&#xff0c;会上高德地图发布了全新升级的城市交通“评诊治”智能决策SaaS系统&#xff0c;以助力城市交通的可持续、精细化…

spring boot 集成rocketMq + 基本使用

1. RocketMq基本概念 1. NameServer 每个NameServer结点之间是相互独立&#xff0c;彼此没有任何信息交互 启动NameServer。NameServer启动后监听端口&#xff0c;等待Broker、Producer、Consumer连接&#xff0c; 相当于一个路由控制中心。主要是用来保存topic路由信息&#…

知识图谱与人工智能:携手共进

知识图谱与人工智能&#xff1a;携手共进 一、引言&#xff1a;知识图谱与人工智能的融合 在这个数据驱动的时代&#xff0c;知识图谱与人工智能&#xff08;AI&#xff09;之间的融合不仅是技术发展的必然趋势&#xff0c;也是推动各行各业创新的关键。知识图谱&#xff0c;作…

windows下pycharm中配置conda虚拟环境

目录 一&#xff1a;背景 二&#xff1a;安装conda环境 三&#xff1a;pycharm配置环境 四&#xff1a;注意问题 一&#xff1a;背景 在使用python的过程中&#xff0c;我们可能需要在一个windows环境中创建多个版本的python和安装不同的库去做一些开发任务。 使用conda&a…

TQ15EG开发板教程:在MPSOC上运行ADRV9371

首先需要在github上下载两个文件&#xff0c;本例程用到的文件以及最终文件我都会放在网盘里面&#xff0c; 地址放在本文最后。首先在github搜索hdl选择第一个&#xff0c;如下图所示 GitHub网址&#xff1a;https://github.com/analogdevicesinc/hdl/releases 点击releases…

Docker入门实战教程

文章目录 Docker引擎的安装Docker比vm虚拟机快 Docker常用命令帮助启动类命令镜像命令docker imagesdocker searchdocker pulldocker system dfdocker rmi 容器命令redis前台交互式启动redis后台守护式启动Nginx容器运行ubuntu交互式运行tomcat交互式运行对外暴露访问端口 Dock…

Java基础07--多线程-网络编程-Java高级

一、多线程 1.认识多线程 ①线程 ②多线程 2.创建线程方式 ①方式一&#xff1a;继承Thread类 1.让子类继承Thread线程类 2.重写run方法&#xff0c;就是这个线程执行会执行的操作。 3.创建继承Thread的子类对象就代表一个线程 4.启动线程:.start()-自动执行run方法 注意&am…

绝地求生:PUBG×杜卡迪联名上线!参与投稿评论赢取精美好礼

PUBG杜卡迪联名活动游戏内现已正式上线&#xff01;我们诚邀与您一起在开拓未知战场和书写新历史的过程中&#xff0c;与杜卡迪一同实现您的极速梦想&#xff01; 在本次的杜卡迪工坊中&#xff0c;更是包含了具备标志性红色在内的6种颜色供您自由选择&#xff0c;一起自由驰骋…

创作一首音乐需要多长时间?网易云音乐内测AI音乐生成工具『网易天音』

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

视频基础学习五——视频编码基础二(编码参数帧、GOP、码率等)

系列文章目录 视频基础学习一——色立体、三原色以及像素 视频基础学习二——图像深度与格式&#xff08;RGB与YUV&#xff09; 视频基础学习三——视频帧率、码率与分辨率 视频基础学习四——视频编码基础一&#xff08;冗余信息&#xff09; 视频基础学习五——视频编码基础…

KKVIEW远程远程访问家里电脑

远程访问家里电脑&#xff1a;简易指南与价值所在 在数字化时代&#xff0c;电脑已成为我们日常生活和工作中不可或缺的工具。有时&#xff0c;我们可能在外出时急需访问家中电脑里的某个文件或应用&#xff0c;这时&#xff0c;远程访问家里电脑就显得尤为重要。本文将简要介…

SQLite---调试提示(十九)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite Android 绑定&#xff08;十八&#xff09; 下一篇&#xff1a;从 SQLite 3.4.2 迁移到 3.5.0&#xff08;二十&#xff09; ​ 以下是 SQLite 开发人员跟踪、检查和了解 核心 SQLite 库。 这些技术旨在帮助理解 核…

从 SQLite 3.5.9 迁移到 3.6.0(二十一)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;从 SQLite 3.4.2 迁移到 3.5.0&#xff08;二十&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 ​SQLite 版本 3.6.0 &#xff08;2008-07-16&#xff09; 包含许多更改。按照惯例 SQLite项目&#xff…